继承
1.1 protected关键字
为了实现java的封装特性,java中设置了访问修饰限定符,主要限定:类或者类中成员能否在类外或者其 他包中被访问。
范围 | private | default | protected | public | |
---|---|---|---|---|---|
1 | 同一包中的同一类 | √ | √ | √ | √ |
2 | 同一包中的不同类 | √ | √ | √ | |
3 | 不同包中的子类 | √ | √ | ||
4 | 不同包的非子类 | √ |
那父类中不同访问权限的成员,在子类中的可见性又是什么样子的呢?
// extend01包中
public class B {
private int a;
protected int b;
public int c;
int d;
}
// extend01包中
// 同一个包中的子类
public class D extends B{
public void method(){
// super.a = 10; // 编译报错,父类private成员在相同包子类中不可见
super.b = 20; // 父类中protected成员在相同包子类中可以直接访问
super.c = 30; // 父类中public成员在相同包子类中可以直接访问
super.d = 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问
}
}
// extend02包中
// 不同包中的子类
public class C extends B {
public void method(){
// super.a = 10; // 编译报错,父类中private成员在不同包子类中不可见
super.b = 20; // 父类中protected修饰的成员在不同包子类中可以直接访问
super.c = 30; // 父类中public修饰的成员在不同包子类中可以直接访问
//super.d = 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问
}
}
// extend02包中
// 不同包中的类
public class TestC {
public static void main(String[] args) {
C c = new C();
c.method();
// System.out.println(c.a); // 编译报错,父类中private成员在不同包其他类中不可见
// System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问
System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
// System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问
}
}
这里我们要注意:父类中private成员变量虽然在子类中不能直接访问,但是也继承到子类中了.
1.2 继承方式
Java中只支持以下几种继承方式:
- 单继承:即子类不能继承多个父类,只能继承一个父类。
- 不同类继承同一个类:即一个父类可以被多个子类继承。
- 多层继承:即继承可以进行嵌套继承。
注意:Java中不能实现多继承,即一个类只能继承一个父类。
1.3 final关键字
final关键可以用来修饰变量、成员方法以及类。
【修饰变量或字段】:被final修饰的变量或字段就成为了常量。其值不能被更改。
final int a = 10;
a = 20;//编译出错
【修饰类】:表示此类不能被继承。
final public class Animal {
...
}
public class Bird extends Animal {//编译出错
...
}
【修饰方法】:表示该方法不能被重写。
1.4 组合
组合并没有特别的关键字,只是将一个类的实例作为另外一个类的字段。
例如:汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合,因为汽车是有这些部件组成的。
// 轮胎类
class Tire{
// ...
}
// 发动机类
class Engine{
// ...
}
// 车载系统类
class VehicleSystem{
// ...
}
class Car{
private Tire tire; // 可以复用轮胎中的属性和方法
private Engine engine; // 可以复用发动机中的属性和方法
private VehicleSystem vs; // 可以复用车载系统中的属性和方法
// ...
}
// 奔驰是汽车
class Benz extend Car{
// 将汽车中包含的:轮胎、发送机、车载系统全部继承下来
}
建议:能用组合就用组合。
1.5 总结
本章的内容就到这里啦,若有不足,欢迎评论区指正,最后,希望大佬们多多三连吧,下期见!