封装
将代码进行提取和总结,抽取成不同的形式
体现形式有:方法、类(属性私有化——将属性限制为私有化,然后提供对外的设置和获取的方法,然后在方法中限制使数据更加符合常理)
优势:提高了代码的复用性,保证了数据的合法性
权限修饰符
继承
如果一些类中含有相同的代码,那么可以将这些相同的代码提取到一个新的类中,然后通过extends关键字让原来的类和新的类产生关系 — 继承。 通过继承,原来的类就称之为了子类(派生类),新的类就成了父类(超类/基类)。子类通过继承父类可以使用父类中的一部分方法和属性。
java中为单继承,多实现
优势:提高代码的复用性,避免方法的调用产生歧义
super关键字
在子类中用于表示父类对象的引用,可以在子类中调用父类中的方法的属性。
super语句 — 子类在继承父类之后,子类的构造方法中会含有一个super语句。如果没有手动指定super语句,那么默认使用super()调用父类无参的构造;如果父类只提供了含参构造,那么子类就必须手动提供对应形式的super语句 — super语句必须在子类构造方法的首行
方法的重写/覆盖
在父子类中存在了方法签名相同的非静态方法。遵循 “两等两小一大”原则:
- 方法签名相同
- 如果父类中的方法的返回值类型是基本类型/void,那么子类重写的方法的返回值类型与父类一致
class A {
public void m(){}
}
class B extends A {
public void m(){}
}
- 如果父类中的方法的返回值类型是引用类型,那么子类在重写方法的时候,返回值类型要么与父类一致,要么是父类方法返回值类型的子类
class A {}
class B extends A {}
class C {
public A m(){return null;}
}
class D extends C {
public B m(){return null;}
}
- 子类重写的方法的权限修饰符的范围要大于等于父类中对应方法的权限修饰符的范围
class A {
public void m(){}
}
class B extends A {
public void m(){}
}
注意:如果父类中的方法用private修饰,那么这个方法对子类不可见,所以此时与子类中的方法构不成重写
多态
编译时多态:方法的重载
add(2, 4) -> add(int, int)
add(3, 1, 7) -> add(int, int, int)
运行时多态:向上造型和方法的重写 — 基于继承的
注意:如果使用向上造型来创建对象,那么这个对象所能调用的方法看的是父类中的声明,方法如何执行看的是子类中的实现过程
重写的理解
-
子类重写的方法的权限修饰符的范围要大于等于父类中对应方法的权限修饰符的范围
-
如果父类中的方法的返回值类型是引用类型,那么子类在重写方法的时候,返回值类型要么与父类一致,要么是父类方法返回值类型的子类
注意:Java中所有的基本类型之间没有继承关系,之所以能够自动提升,是因为所表示的范围是否能够包含