Java基础之(继承)

来源:互联网 发布:淘宝上自粘墙纸有毒吗 编辑:程序博客网 时间:2024/05/21 08:38

1、继承语法规则:

class 子类extends 父类

例如:class Dog extends Animal{...}

继承的好处:子类拥有父类的所有属性和方法,父类中private修饰的属性不能继承。

2、方法的重写:

当子类对继承父类的方法不满意时,可以重写父类继承的方法,当调用方法时,优先调用子类的方法。

重写的规则:返回值类型、方法名、参数类型及个数都要与父类继承的方法相同。

3、继承的初始化顺序:

初始化父类再初始化子类;限制性初始化对象中的属性,再执行构造方法中的初始化。

package com.imooc;public class Animal {public int age=10;public String name;public Animal(){System.out.println("Animal类执行了");age=20;}public void eat(){System.out.println("动物具有吃东西的能力");}}
输出结果是:animal age:20(所以说age=10因为先执行,而被覆盖掉!)

4、final关键字,最终的。可以修饰类、方法、属性和变量。

final修饰类:则该类不允许被继承。

final修饰方法:则该方法不允许被覆盖(重写)。

final修饰属性:则该类的属性不会进行隐式的初始化,所以类的初始化属性必须有值,或者在构造方法中赋值。

final修饰变量:该变量的值只能赋值一次值,即变成常量。

5、super关键字:在对象的内部使用,可以代表父类对象。

访问父类的属性super.age

访问父类的方法super.eat()

package com.imooc; public class Animal {public int age=10;public String name;public Animal(){System.out.println("Animal类执行了");}public void eat(){System.out.println("动物具有吃东西的能力");}}

package com.imooc;public class Dog extends Animal {public int age=20;public Dog(){System.out.println("Dog类执行了");}public void eat(){System.out.println("狗具有吃骨头的能力");} public void method(){System.out.println("父类对象的值"+super.age);System.out.println("子类对象的值"+age);}}

package com.imooc;public class Initial {public static void main(String[] args) {Dog dog=new Dog();;dog.method();}}
运行结果:

Animal类执行了
Dog类执行了
父类对象的值10
子类对象的值20

5、子类的构造过程中,必须调用其父类的构造方法。其实就是隐式的使用了super关键字。

package com.imooc;public class Dog extends Animal {public int age=20;public Dog(){super();System.out.println("Dog类执行了");}}

package com.imooc;public class Initial {public static void main(String[] args) {Dog dog=new Dog();}}
运行结果:

Animal类执行了
Dog类执行了


所以说super()写和不写是相同的结果。

如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。

如果显式调用,super()必须放在子类构造方法的第一行。否则报错:Constructor call must be the first statement in a constructor.

如果子类的构造方法中没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译报错:

Implicit(隐式的) super constructor Animal() is undefined. Must explicitly(显式的) invoke another constructor

0 0
原创粉丝点击