代码中创建的类,主要是为了能将我们生活中的事物抽象成具体的属性和方法,但是在实际的场景中,有很多东西他们之间存在有一定关联的属性和方法,例如动物之间,城市之间等,他们存在有完全相同意义的属性和方法,所以遇到这种情况,我们可以设计一个类,让其他的类继承他的部分属性及方法。
举个例子:
我们在同一个包中创建了一个Animal类一个Cat类以及一个Dog类
//创建Animal类
public class Animal {
//Animal类的name属性
public String name;
//Animal类的构造方法
public Animal(String name){
this.name=name;
}
//Animal类的eat方法
public void eat(String food){
System.out.println(this.name+"吃"+food);
}
}
//创建Cat类
public class Cat {
//Cat类的name属性
public String name;
//Cat类的构造方法
public Cat(String name) {
this.name = name;
}
//Cat类的eat方法
public void eat(String food){
System.out.println(this.name+"吃"+food);
}
}
//创建Dog类
public class Dog {
//Dog类的name属性
public String name;
//Dog类的构造方法
public Dog(String name) {
this.name = name;
}
//Dog类的eat方法
public void eat(String food){
System.out.println(this.name+"吃"+food);
}
}
我们可以发现,在这个三个类中他们都有名字属性和吃这个方法,且name属性和eat方法的意义是完全一样的,我们每创建一个类都要将这个属性和方法写一遍,造成了大量的代码冗余,此时我们就可以让Cat类和Dog类继承Animal类,来达到相同的效果。
被继承的类我们称为父类、基类或超类,继承父类的类我们称为子类,派生类。
继承的语法规则
基本语法:
public class Cat extends Animal {}
public class 子类 extends 父类 {}
1.使用extends指定父类
2.java中一个子类只能继承一个父类,但是可以多层继承
3.子类会继承父类的所有public的字段和方法、
4.父类中所有的private的字段和方法子类
那么我们就可以按照基本的语法规则将上面的代码进行改写
//Animal类将name属性和eat方法体现
public class Animal {
public String name;
public Animal(String name){
this.name=name;
}
public void eat(String food){
System.out.println(this.name+"吃"+food);
}
}
//Cat继承Animal类
public class Cat extends Animal {
public Cat(String name) {
//使用super调用父类的构造方法
super(name);
}
}
//Dog继承Animal类
public class Dog extends Animal{
public Dog(String name) {
//使用super调用父类的构造方法
super(name);
}
}
这样我们就可以发现可以利用更少的代码达到原本的效果,同时当有更多的与父类有关联的类产生时我们也可以更快的完善该类。
相关规定:
假设Animal类中的name属性用private修饰,他将会变成一个私有的属性,那么在子类中就不可以继承该属性;若name属性之前没有关键字修饰,那么他就是default型(友好型),友好型的属性具有包访问权限,只有在相同的包下才可以继承,假设我们将Animal类和Cat类Dog类放在了不同的包中,那么这个属性就不可以被子类继承。
多层继承:
//还是原来的Animal类
public class Animal {
public String name;
public Animal(String name){
this.name=name;
}
public void eat(String food){
System.out.println(this.name+"吃"+food);
}
}
//Person类继承Animal类
public class Person extends Animal{
public Person(String name) {
super(name);
}
}
//Student类继承Person类
public class Student extends Person{
public Student(String name) {
super(name);
}
}
当我们的类进行了继承之后在类的旁边会出现一个标志进行点击就可以看到该类的所有子类。
java中可以存在多层继承,子类可以再进一步派生出新的子类。继承时同样符合继承的相关语法规定。