一、四种封装性(前文已经讲到)
二、static/final/abstract
1.static
1.1 static修饰的对象
①类无法修饰
②属性,方法,代码块,内部类
构造器无法修饰,构造器只有造对象时才会使用
1.2static存储机制
①静态属性与非静态属性
静态属性即多个对象公用一个静态属性,而非静态属性是多个对象都有自己的一套静态属性
静态属性早于对象的加载,即静态属性是随着类的加载而加载的。
静态属性只加载一次,存在方法区的静态域中,可以通过类和对象访问。
静态属性可以通过类和对象访问,非静态属性只能通过对象访问
静态属性不能使用super和this表示本对象的关键字
②内存解析
main方法之前,方法区中会加载类的信息,静态域,常量池。此时即会运行静态的代码块,保存静态变量,静态方法
然后,有引用保存new出的对象的地址,栈中保存局部变量,堆中保存new出的对象
2.final
2.1final修饰的对象
①类
表明该类不可以被继承
②属性,方法,内部类
属性表明该属性不可被更改
方法表明该属性不可被重写
内部类表明该类不能被继承
2.2final的使用
final的属性赋值可以在显式初始化,代码块中,构造器中,但是不能再方法中赋值。因为此时已将对象的结构载入堆中,而此时不调用方法该变量无值。即final属性必须在放入堆中时有值。
final在修饰形参时只有在调用此形参时,才会将形参放入栈中赋值即赋实参。一般static final表示全局静态常量。
3.abstract
3.1抽象的基本概念
抽象即父类无需造出对象,只需子类造对象即可。
3.2抽象类的结构
①抽象类的构造器
子类可以用,因为子类需要拿其来实例化
②抽象类的方法
抽象类的方法只需声明,不需有方法体
public abstract void eat();
3.2抽象类和抽象方法的关系
①包含抽象方法的一定是抽象类,而抽象类中也可以有非抽象方法
②抽象类不可以创建实例(可以多态),抽象方法不可以被调用只有当重写后才可以调用
3.3子类继承后
子类继承抽象类后必须重写抽象类中的抽象方法,否则子类也是抽象类
三、interface/implements接口
1接口的简介
可以通过接口来解决多重继承的问题。且接口解决 能不能,继承解决 是不是 的问题。接口的地位同类。
2.JDK8以前接口
2.1接口的定义
接口只能定义全局常量和抽象方法
2.2 接口的规定
①接口中无构造器意味着接口无实例化(可以多态)
interface Flyable{public static final int max = 7900;public abstract void fly();}
正常void fly可以忽略前面的public abstract,即默认为public abstract
②接口结构的意义
接口的属性定义为 public static final 即表明该接口的属性随着接口加载而加载,无法更改,即全局静态常量
接口的方法定义为public abstract即表明该接口的方法是抽象方法,需要在实现类中重写
③接口的规定
class plane implement Flaybale{}即java利用implement来用类去实现接口
java类中可以实现多个接口,用逗号连接即可
类和类—继承 类和接口—实现 接口和接口—多继承
接口的使用可以体现多态性,即传入的可以是实现类的对象,但是引用可以是接口类型
④接口和类的重合
实现接口和类中出现了两个相同的方法,若重写即调用重写后的,若为重写即需要super.调用父类的,接口.调用接口的
3.JDk8以后的接口
3.1新规定
可以定义静态方法和默认方法
静态方法可以直接用,而默认方法需要实例来调用。其中静态方法只能通过接口来调用,而实现类可以调用默认方法,若实现类重写默认方法,则调用重写以后的
3.2类 接口的重合
如果子类继承的父类和实现类中使用了同名同参的方法,子类未重写优先调用父类的方法
如果实现类实现了多个接口,而多个接口定义了同名同参的默认方法,则未重写时编译报错
若重写后还想调用接口的方法 使用接口名.super.method()