今天的博客主题
基础篇 --》面向对象 --》Java继承
什么是继承?
Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。
Java中的继承与生活当中的继承还是有去区别的。
Java中的继承就是子类继承父类的特征和行为。
父类比较通用,子类比较具体。
谁继承了父类谁就是这个父类的子类。
继承是避免冗余,提高代码的可重用行和可维护性的有效手段。
继承的传递性:直接父类 间接父类
继承概念下的 is-a 关系是个单向的关系,子类具有父类的属性和行为,以及自身特殊的属性和行为。
Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。
继承有什么优点?
- 使用继承可以实现代码的复用,减少代码冗余
- 子类可以直接“拥有”父类中所有允许子类继承的属性和方法
- 子类可以改变父类中已有的方法,执行不同的代码实现
怎样实现一个继承?
实现继承需要 (extends)关键字
例:
public class Person {
private String name;
private String age;
private double money;
// ...省略Setter Getter方法...
}
public class Man extends Person{
}
这样Man类就继承了Person类,Person类就变成了父类,Man类就是Person类的子类。
Man就拥有了Person类里的所有属性和方法。
为什么要使用继承?
例如:人类,有男人和女人,都有公共的状态:姓名、年龄、生日。
也有相同的行为:吃饭,睡觉,当然也有不一样的,比如女人可以生孩子,男人不可以(是在想不出来比这个好一点能区分的行为了)
如果按照这个需求,没有继承,那我们的代码将会是下边这个样子。
// 男人类
public class Man {
private String name;
private String age;
private Date boriday;
// ...省略Setter Getter方法...
}
// 女人类
public class Woman {
private String name;
private String age;
private Date boriday;
// ...省略Setter Getter方法...
}
使用继承之后代码就变成这样了
// 人类 抽出共同特性
public class Person {
private String name;
private String age;
private Date boriday;
// ...省略Setter Getter方法...
}
public class Man extends Person{
}
public class Woman extends Person{
}
这样Man类,Woman类里面公有的属性都抽取到了Person类里面,那如果那增加个学生类,学生也有姓名年龄生日,
那就直接定义好学生类名,使用extends关键字继承Person类行了,当然每个类里面在可以继续实现和别的类不同的属性方法。
那如果子类不想使用父类的方法呢?父类可以把这个方法设为私有方法,那如果别的类继承这个父类要用这个方法呢?反正都已经继承过来了,可以不用管自己写一个,或者重写一下父类中的这个方法也成。
比如人类都有行为吃饭睡觉,那这个行为也可以增加到person类里面去,Person类就是一个简单吃饭的方法,而学生吃饭不想简单的吃一下person类当中的饭,
学生类就可以重写person类里吃饭的方法。
例:
在person类增加eat()方法
public void eat(){
System.out.println("简单的吃个饭");
}
增加学生类继承Person类
public class Student extends Person {
}
//测试
public class TestDemo {
public static void main(String[] args) {
Student s = new Student();
s.eat();
}
}
输出结果:简单的吃个饭
吃饭学生不想简单吃个饭,怎么办呢?改造Student类
public class Student extends Person {
@Override
public void eat(){
System.out.println("吃个学生套餐");
}
}
//测试
public class TestDemo {
public static void main(String[] args) {
Student s = new Student();
s.eat();
}
}
输出结果:吃个学生套餐
这样Student类重写了Person类的eat方法。
重写使用 @Override 关键字来标识。
一个类当中是无法实现重写的
注意:
一个子类只能有一个父类
一个父类可以有多个子类
子类继承父类,父类派生子类
为什么要用继承?
说到这大概就知道了为什么要用继承了吧
- 提高代码的重用性
- 提高程序的扩展性
简单说就是 继承重用父类代码,为多态做准备
如果一个类没有任何继承,那么会默认继承Object类。
学而不思则罔