目录
抽象类
抽象类的实现就是为了更好地实现多态。
抽象类,抽象方法定义格式
在类,方法定义的访问修饰限定符前面或者后面加上关键字abstract。
abstract public class Base { abstract public void fun(); } public abstract class Base { public abstract void fun(); }
抽象方法一定不能有具体实现,就跟c语言中函数声明一样。
抽象类,抽象方法注意事项
1.抽象类不能实例化对象
2.抽象类中可以有抽象方法也可以有普通方法
3.抽象方法不能被private,static,final修饰,因为抽象方法是用来重写的
4.抽象方法只能存在于抽象类中
5.当普通类继承了抽象类就必须重写抽象方法,抽象类继承抽象类可以不重写抽象方法
当我们有抽象类来用多态就更简单:
public class Shape { public abstract void are(int a); } class Rect extends Shape{ @Override public void are(int a) { System.out.println(a*a); } } class Cycle extends Shape{ @Override public void are(int a) { System.out.println(a*a*3.14); } }
接口
接口的定义形式
接口定义与类定义差不多,将类定义的关键字class改为使用关键字interface来定义接口:
接口名一般采用大驼峰且一般使用形容词并且在最前面加一个大写字母I
public interface ISwimming(){ }
idea创建接口步骤
1.鼠标右击包,new,左击Java Class
2.左击interface,输入接口名
接口特性
1.接口不能实例化对象
2.接口当中成员变量默认是public static final修饰。
3.接口中的方法默认为public abstract 修饰
4.接口中的方法从JDK8之后,用default修饰后就可以有具体实现。
5.接口中不能有静态代码块和构造方法
6.接口中可以有static修饰方法,修饰后就可以有具体实现
7.接口间的“继承”(用延伸更合适)用extends,此处可多延伸
8.类使用接口用关键字implements,可多接口
如果一个类既要继承也要实现接口,那一定得继承在前
Object类
Object类在Java中默认是所有类的父类,可以在子类中对Object类的方法进行重写来实现需求。
内部类
类中在定义一个类,这个类中的所有都是为外面这个类服务就叫内部类。
静态内部类
静态内部类就是在类定义的class关键字前加上 static
静态内部类特性
1.实例化静态内部类格式:外部类.内部类 变量名 = new 内部类();
2.静态内部类中不能直接访问外部类的非静态成员,要访问就要实例化一个外部类对象
3.外部类可以访问内部类所有(包括private修饰)成员,也用实例化来访问
实例内部类
就是直接在类中定义一个普通类
特性
1.不能定义静态成员,非要定义就加final修饰为常量
2.实例化实例内部类:先实例化外部类在内部类 变量名 = 外部类对象名.new 内部类();
3.实例内部类能直接访问外部类的所有成员(包括private修饰)
4.外部类可以通过实例化实例内部类访问实例内部类所有成员
5.如果实例内部类中有与外部类同名成员,默认访问实例内部类成员,访问外部类成员格式外部类.this.变量名
局部内部类
定义在方法中的类(很少用),只能在方法内部使用
匿名内部类
多用于接口,定义格式如下:
new 接口(){ //重写抽象方法 };
当匿名内部类用于类时不能被接收,但是用于接口就可以被接收。