一.继承的好处
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
二.java继承特点
1.Java只支持单继承,不支持多重继承操作(extends A,B,C…)
class A {}
class B {}
class C extends A,B {} // 错误的,一个子类继承了两个父类,Java中不允许
2.为什么只支持单继承?
多继承会存在安全隐患,因为当继承的多个类都存在相同的属性或方法名相同方法体不同的方法,子类进行调用时,就会产生不知道该调用哪一个类中的方法的情况。
Java支持多层继承(继承体系)
class A {}
class B extends A {}
class C extends B {}
如果想用这个继承体系的所有功能,那么就实用对底层的子类创建的对象
如果想看这个体系的共性功能,那么就看最顶层的类的功能
三.继承的概念
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
举个例子:
class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
class Student extends Person {
private String school;
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return this.school;
}
}
public class TestDemo {
public static void main(String args[]) {
Student stu = new Student();
stu.setName("张文康");
stu.setAge(18);
stu.setSchool("山东农业大学");
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge() + ",学校:" + stu.getSchool());
}
}
运行结果:
姓名:张文康,年龄:18,学校:山东农业大学
总结:子类实际上是将父类定义的更加的具体化的一种手段。父类表示的范围大,而子类表示的范围小。
四.继承的限制
限制一:一个子类只能够继承一个父类,存在单继承局限。
class A {}
class B extends A {}
class C extends B {}
限制二:在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
限制三:在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。
五.什么是方法重写(overriding)?
1.子类根据需求从父类继承的方法进行重新编写
2.重写是,可以使用super.方法的方式来保留父亲的方法
3.构造方法不能被重写
import java.util.*;
public class override {
public static void main(String[] args) {
Cat cat1=new Cat();
cat1.cry();
Dog dog1=new Dog();
dog1.cry();
}
}
class Animal {
String name;
int age;
public void cry() {
System.out.println("");
}
}
class Cat extends Animal {
public void cry() {
System.out.println("我是小猫");
}
}
class Dog extends Animal {
public void cry() {
System.out.println("我是小狗");
}
}
运行结果:
我是小猫
我是小狗
六.方法重写的规则
1.方法名相同
2.参数列表相同(数量,顺序,数据类型)
3.如果有返回值,返回值相同或者是其子类
3.访问权限不能严于父类
4.父类的静态方法不能被重写为非静态方法,反之父类的非静态方法不能被重写为静态方法5.子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(静态方法中无法使用super、this)
6.父类的私有方法不能被子类重写(private修饰的)
七.Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
super.move();
System.out.println("狗可以跑和走");
}
}
public class TestDog{
public static void main(String args[]){
Animal b = new Dog();
b.move();
}
}
运行结果:
动物可以移动
狗可以跑和走