提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
java的继承是三个主要特性之一,这里的做一个笔记吧,因为和C++的继承有一点区别,所以整理出来,为以后学习起来方便,写的不对的地方希望大佬们指出。
一、继承基本概念(is-a)
目的就是为了代码重用,或者类的重用,这里和C++中不一样的叫法,就是也可以把父类称之为超类,关键字是=>extends(扩展的意思)
二、代码样例
注意:和C++不同的是,Java中的继承只能是单继承,就是说,子类只能有一个父类,单父类可以有多个子类。
父类people
public class people {
public int age;
public String name;
}
子类student,里面多了一个学校
public class student extends people{
public String school;
}
主方法
public class Main {
public static void main(String[] args) {
student s1=new student();
}
}
可以看到,创建一个子类实例,也可以访问到父类,因为我属性全都是public,若是private父类是看不到的。
1.super 与构造方法
每个类都有构造方法,如果不显式的创建构造方法,那么编译器就会给这个类自动生成一个没有参数的构造方法。
当父类里面有构造方法的时候,并且这个构造方法带有参数的时候,编译器就不再自动生成无参构造方法了,此时再创建子类实例,就需要显示的调用父类的构造方法(super),并且进行传参,否则创建不出来父类的实例,就会编译出错。
注意:当创建一个子类实例的时候,会先构造父类实例
public class student extends people{
public String school;
public student(int age, String name, String school) {
super(age, name);
this.school = school;
}
}
2.特殊的知识点
当子类和父类有相同的属性时,通过super关键字,来取父类的属性;
public class student extends people{
public String school;
public int age=10;
public void func(){
System.out.println(age);
System.out.println(super.age);
}
}
若继承太过于复杂,维护成本也会很大,为了让一个类不被继承,就可以使用final关键字;
final class people {
public int age=100;
public String name;
}
这时,student类就不能继承了
三、组合(has-a)
组合也是为了代码重用,也是面向对象的一个重要属性。可以理解为一个类里面有好多其他的类
public class Homehvae {
public Cat cat=new Cat();
public Dog dog=new Dog();
public student stu=new student();
}
家里有猫有狗还有一个学生。