java 继承测试:
package java继承; class Animal { void eat() { System.out.println("animal : eat"); } } class Dog extends Animal { void eat() { System.out.println("dog : eat"); } void eatTest() { this.eat(); // this 调用自己的方法 super.eat(); // super 调用父类方法 } } public class test { public static void main(String[] args) { Animal a = new Animal(); a.eat(); Dog d = new Dog(); d.eatTest(); } }
运行结果:
package java继承; class Animal { void eat() { System.out.println("animal : eat"); } } class Dog extends Animal { void eat() { System.out.println("dog : eat"); } void eatTest() { this.eat(); // this 调用自己的方法 // super.eat(); // super 调用父类方法 } } public class test { public static void main(String[] args) { Animal a = new Animal(); a.eat(); Dog d = new Dog(); d.eatTest(); } }
运行结果:
通过上边代码,可得到:
①super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
②this关键字:指向自己的引用。
继承的特性:
-
子类拥有父类非private的属性,方法。
-
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
-
子类可以用自己的方式实现父类的方法。
-
//Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类。
不能继承的类:
关键字final,实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final。
思考题:子类的构造方法在运行之前,必须调用父类的构造方法,不能反过来,原因如下:
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不先调用父类的构造方法,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
public class test { public static void main(String[] args) { System.out.println(new test()); } }
运行结果: