java继承
**ctrl+H:**查看继承关系树
Object类:在java中,所有的类都默认直接或间接继承Object类,如果创建的类后边没有用extends继承父类,就默认继承Object类,如果继承了父类,就成了直接继承父类,间接继承Object类
java中类只有单继承,没有多继承!一个儿子只有一个爸爸,一个爸爸可以有多个儿子
子类is a父类:student is a person
teacher is a person
cat is a animal
子类 extends 父类后:
子类就是父类的派生类,子类就可以继承父类所有procted以上访问权限的方法和属性。如果是私有属性变量,也可以访问它的共有的get和set方法**(封装)**
四种访问权限
四种权限修饰关键字
一、private:只能被本类访问
二、default: 默认属性,并且不能写出来 只要你没有用其他修饰默认就是default,
同包目录下访问
三、protected:除了能被同包访问,还可以给不同包下的子类访问
四、public:公共的 可以被其他包访问
super
1.当我们在父类中编写一个属性name,而子类中的也有一个相同名字的属性name,这时就难以区分调用的到底是子类的name还是父类的name这时我们需要用到this.name和super.name来区分
**this.name:**本类中的name属性
**super.name:**父类中的name属性
2.当我们调用方法时,如果子类和父类中有同样名称的方法,那么子类的方法就构成了对父类方法的重写,所以直接调用该方法时调用的是子类中的该方法
**print()😗*调用子类中的print()方法
**this.print()😗*调用子类中的print()方法
**super.print()😗*调用父类中的print()方法
父类中私有化的方法能够继承,但是无法调用
3.当子类继承父类后,用子类new对象时,首先会调用子类的空参构造器,子类的空参构造方法中会在第一行放置一条隐藏代码super();首先调用父类的构造器,所以在new子类对象时其实是在子类构造器中先调用了父类的空参构造器。而且在构造器中this();和super();不能同时存在,因为他们两个都必须放到第一位
super注意点
1.super调用父类的构造方法,必须在构造方法的第一行
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时在构造方法中调用构造方法
super Vs this
代表的对象不同:
this:本身调用这个对象
super:调用的是父类对象
前提:
this:没有继承也能够使用
super:只能在继承条件下使用
构造方法:
this():调用本类的空参构造器
super():调用父类的空参构造器
重写
-
重写只能够重写非静态方法,静态方法不能够被重写
-
当new的对象调用静态方法时,要看=号前边的对象类型去调用,当new的对象调用非静态方法时,就要看后边的对象类型去调用。
-
静态方法是类的方法,非静态方法是对象的方法
1.当A继承B是时,如果两个类中有相同的静态的方法,在new对象时就要看=前边定义的数据类型来判断是调用子类方法还是父类方法
2.当new的对象调用非静态方法时,就要看后边的对象类型去调用。
重写总结
重写:需要有子类和父类的关系,子类重写父类的方法,只有方法能够重写!!!
-
方法名必须相同
-
参数列表必须相同
-
子类的返回值类型要是父类返回值类型的子类或者相同
-
修饰符:子类的访问权限要比父类的大或等于,不能缩小:public>protected>default>private
5.抛出的异常:范围可以被缩小,但不能扩大。ClassNotFoundException<Exception
重写,子类的方法和父类必须要一直,方法体不同!
为什么要重写
1.父类的功能,子类不一定需要,或者有需要改进的地方。
Alt+Insert–》override;