Java的三大特征——继承
为了提高代码的复用性,对类进行抽象,实现对现实世界更好的建模。
子类继承父类可以获得父类所有的属性和方法(除了构造方法),在Java中没有多继承,只有单继承。
在Java中如果类的后面没有写extends,则默认继承Object类,所有类的根基类都是Object,
- 方法的重写,
在类中,如果在父类中继承的方法,不满足自己本身所需要的,可以重写该方法,必须要有相同的方法名称,返回类型和参数列表。下面是重写的代码。
public class TestOverride {
public static void main(String[] args) {
Chicken chicken = new Chicken();
chicken.eat();
}
}
class Animal {
public void eat() {
System.out.println("Animal.eat(我要开始 狂吃狂吃 吃食物了)");
}
}
class Chicken extends Animal {
@Override
public void eat() {
System.out.println("Chicken.eat(一点点点点的吃东西)");
}
//这里是重载eat方法
public void eat(String food) {
System.out.println("Chicken.eat(类似于方法的重载)" + food);
}
}
2.super关键字
在普通方法中,指向的是直接父类的方法,
1.在构造方法中,调用父类的构造函数,且必须在第一行调用,如果不写super(),则编译器会在第一行默认加上,所以这里写不写都可以,
2.创建对象的时候,永远都是先创建父类,在创建子类。
3.一个子类中包含了它的父类,他会把整个继承链的类都是创建一次。
下面是super使用的代码
public class TestSuper {
public static void main(String[] args) {
Pine pine = new Pine(1000);
pine.green();
System.out.println(pine.age);
}
}
class Tree {
public int age;
public Tree(String str) {
age = 1000;
System.out.println("Tree.Tree(我是小树的构造器)");
}
public void sleep() {
System.out.println("Tree.sleep(小树在睡觉,请勿打扰)");
}
public void green() {
System.out.println("Tree.green(春天到了,小树被绿了)");
this.sleep();
}
@Override
public String toString() {
return "小树的toString";
}
public void abc() {
}
}
class Pine extends Tree {
public int age;
public Pine(int num) {
super("abcd");
age = 998;
System.out.println("Pine.Pine(我是松树的构造器)");
}
@Override
public void sleep() {
super.abc();
System.out.println("Pine.sleep(松树在睡觉)");
}
}
这段代码的输出结果
Tree.Tree(我是小树的构造器)
Pine.Pine(我是松树的构造器)
Tree.green(春天到了,小树被绿了)
我被调用了
Pine.sleep(松树在睡觉)
在这里 前两句代码是构造函数里面的两句输出语句,证明了在创建子类的前面,先创建了父类。这里面还可以分析super,this,所指向的对象。