继承:(来自菜鸟教程)
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
代码:
public class Father {
int a = 3;
public Father(){
System.out.println("这是父类的无参构造方法");
}
public void add(int a, int b){
System.out.println(a+b);
}
}
public class Son extends Father{
public Son(){
System.out.println("这是子类的无参构造方法");
}
public static void main(String[] args) {
Son son = new Son();
int c = son.a;
System.out.println(c);
son.add(1,4);
}
}
----------------------------------------------------------------------------------------
结果:
这是父类的无参构造方法
这是子类的无参构造方法
3
5
概括:子类什么方法和属性都没有,却可以使用父类的方法和属性。由此可见,只要是继承关系。子类就可以使用父类的方法和属性(构造方法无法被继承),而且,实例化一个子类的对象需要先实例化父类的一个对象。下面的列子也说明了这一点,实例化子类的对象,先去实例化父类的,然后发现父类没有无参数的构造方法,所以报错。
修改下父类的构造方法
public class Father {
int a = 3;
public Father(int a){
System.out.println("这是父类的无参构造方法");
}
public void add(int a, int b){
System.out.println(a+b);
}
}
结果:
image.png
这个例子除了很好的解释了实例化子类对象要先实例化父类对象的逻辑。那如果父类有参构造方法,子类却硬要使用时(子类不新增有参构造方法情况下)。可以使用关键字super来指定父类的构造方法
public class Son extends Father{
public Son(){
super(1);
System.out.println("这是子类的无参构造方法");
}
public static void main(String[] args) {
Son son = new Son();
int c = son.a;
System.out.println(c);
son.add(1,4);
}
}
----------------------------------------------------------------------------------------
结果:
这是父类的无参构造方法
这是子类的无参构造方法
3
5
子类加几行代码
public class Son extends Father{
int a = 6;
//方法重载
public void add(int a, int b,int c) {
System.out.println(a + b + c);
}
public void subtraction(int a,int b){
System.out.println(a-b);
}
public Son(){
super(1);
System.out.println("这是子类的无参构造方法");
}
public static void main(String[] args) {
Son son = new Son();
int c = son.a;
System.out.println(c);
son.add(1,4);
son.subtraction(1,6);
}
}
----------------------------------------------------------------------------------------
结果:
这是父类的无参构造方法
这是子类的无参构造方法
6
5
-5
总结:
根据上面几个例子可得几个结论
- 子类可以重载父类的方法和属性
- 子类可以新增方法和属性
- 子类可以继承父类的所有方法和属性(构造方法除外)
- 构造子类的对象前,先构造父类的对象(子类构造方法隐式调用父类不带参数的构造方法)
- super可以调用父类对象
网友评论