继承
继承是Java最重要的,类之间有内在联系,子类和父类。子类比父类更 具体,表示更少的对象。子类是扩展,extends ,这个单词翻译过来也是扩展。
假如有汽车类,又有自动驾驶车类,你只要在继承汽车类加上自动驾驶方法就行了。
代码不用重复写。还是人类 Person为例,这个类里面有属性和方法。
public class Person {
/**
* 父类,有些共性代码
*/
int age;
String name;
int sex;
public void showInfo() {
System.out.println(this.name);
System.out.println(this.age);
System.out.println(this.sex);
}
}
格式:
继承的关键字extends
类修饰名 class 子类名 extends 父类名
你看这里学生类就继承了人类的属性,name ,age ,sex.
还继承了方法。 showInfo(){}
复习一下this关键字
子类写特有的代码就行!
以学生类为例:
public class Student extends Person {
String school;//不用再去定义age,name,sex
public void showInfo() {
System.out.println(this.school);
System.out.println(this.name);
System.out.println(this.age);
System.out.println(this.sex);
}
}
注意:
- 继承提高了代码的效率
- 不要为了继承而继承(比如狗类继承人类,no!)
- 继承是多态的前提(后面讲)
笔记:继承,子类不是父类的子集,是扩展(extends)!(比如你比你爸更优秀)
子类不能访问父类private变量,无这个权限(比如你不能继承你爸的银行卡密码)
一个子类只能有一个父类(你只能有一个爸爸,但是你爸爸可以有多个儿子)
Java不支持多重继承,但是可以用接口来解决这个问题
Java接口
方法的重写(override)
改的只是方法体的代码就是{}里面的东西
在子类里面按住键盘的ALT+/, 如下
这就是方法的重写!
笔记:
方法的重载:一个类有哦多个同名的方法
方法的重写:子类可以重写写父类的方法,覆盖父类的方法;
子类调用父类的方法
public class Student extends Person {
String school;//不用再去定义age,name,sex
// public void showInfo() {
System.out.println(this.school);
System.out.println(this.name);
System.out.println(this.age);
System.out.println(this.sex);
//
// }
public static void main(String[] args) {
Student stu = new Student();
stu.showInfo();//子类调用父类的方法
}
}
把重写的部分注释掉,这个就变成了了子类对父类方法的继承。
四种访问权限修饰符:
笔记:
如果子类和父类在同一个包下:除了private不能访问,其他三种都可以访问,继承使用。
如果子类和父类不在同一个包下:除了private,default不能访问,只有protected public才可以访问,继承使用。
关键字super
为什么有这个关键字呢,因为继承可以是多层的,比如说你和你爸爸,你爸爸和你爷爷。为了区分你继承你爸爸还是你继承你爷爷的东西,用super指明。
笔记:
用super可以追溯父类(或父类的父类)的成员变量;
用super可以追溯父类(或父类的父类)的成员方法;
super可以自动继承父类的无参构造;
父类只有有参构造的时候,那么子类必须构建有参来调用父类的有参构早,调用父类构造方法得写在第一行。
this和super 的区别:
类对象的实例化的底层原理
图片多看几遍!!!
多态
重载:相同的方法,不同的逻辑
重写:子类对父类方法的覆盖,同方法名,覆盖逻辑。
对象的多态;
Person e = new Student();
e.showInfo();
这个e.showInfo是属于Student类的方法
笔记:
栈中,e
堆,new Student(),引用栈中的e
方法在栈中运行,会动态的进站出站。
调用时进栈,用完出栈。
instanceof操作符
判断是否属于对象
案例
Person e = new Student();
System.out.println(e instanceof Student);
返回的是true
object类
object类是最高层的父类(你爸爸的爸爸的祖宗)
笔记:
object类是基(根)类,默认的继承类
子曰:学而时习之!