一、继承
有些类在设计上是有关联的,比如我们定义了一个动物类:
class Animal {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("动物在eat");
}
}
在定义一个猫类:
class Cat {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("猫在eat");
}
public void catSound() {
System.out.println("猫发出的声音是喵喵");
}
}
我们发现:这两个类有很多的部分是重叠的。那么,能不能降低重叠的部分,把Animal类中的直接拿过来在Cat类中使用呢?面向对象思想中提出了继承的概念。
1、继承的概念
继承:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。简单来说,继承是is--a的关系:猫是一个动物。
2、定义继承
Java中要表示类的继承关系,需要extends(扩展)关键字。Cat如何继承Animal:
类只有两种访问修饰限定符:public和什么都不加的默认权限访问。一个Java文件中只能只能有一个public类。由于main方法所在的类有一个public,所以其他的类都是默认的访问修饰限定符。这里的Cat是子类(或者派生类),Animal是父类(或基类、超类)。中间的extends表示扩展、继承。
那么上面的两个类就可以写为:
class Animal {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("动物在eat");
}
}
class Cat extends Animal {
//Cat类继承了Animal类的属性和方法。
public void catSound() {
System.out.println("猫发出的声音是喵喵");
}
}
现在我们以Base类(基类)和Derived类(派生类)来举例。
class Base {
public int data1 = 10;
public int data2 = 20;
public void baseMethod() {
System.out.println("父类方法");
}
}
class Derived extends Base {
public int data3 = 30;
public int data4 = 40;
public void derivedMethod() {
System.out.println("子类方法");
}
}
访问子类和父类的属性或方法:
发现:实例化子类对象,红色的框中出现子类继承过来父类的一些属性。
3、super关键字
现在在子类中写一个derivedBaseSameNameAttribute()方法表示出现子类和父类中变量名同名的情况,在Base类中加一个data5=51;Derived类中加一个data5=50,然后在这个方法中访问。
打印的是子类中的data5。要访问父类的data5,需要加super关键字。super表示父类对象的引用。