目录
static
继承:
继承的特点:
案例:自己设计一个继承体系练习:
设计思想:
代码:
子类到底能继承父类的哪些类容?
成员变量内存的继承情况:
成员方法的内存继承情况:
继承中访问的特点:
成员变量的访问特点:就近原则
成员方法的访问特点:
方法的重写:
继承中构造方法的访问特点:
案例:带有继承结构的标准Javabean类
static
静态方法中不能非静态的东西,非静态的东西比如成员变量,成员方法。(本质上没有this的原因)静态方法中没有this关键字,静态方法中,只能访问静态,非静态方法可以访问所有(非静态的方法中是有this,也可以通过this调用静态中的东西)。
继承:
什么时候用继承呢?
当类与类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承来优化代码。
继承的特点:
Java只支持单继承(一个子类只能继承一个父类)不支持多继承(子类不能支持多个父类),但是可以多层继承的(子类a继承父类b,父类b继承父类c是可以的,c是a的间接父类);简单理解:儿子不能有多个爸爸。
c++语言中是允许多继承的。
默认父类object。
案例:自己设计一个继承体系练习:
设计思想:
代码:
package jicheng;public class Animal {public void eat() {System.out.println("吃东西");}public void drink() {System.out.println("喝水");}
}
package jicheng;public class buoucat extends cat{}
package jicheng;public class cat extends Animal {public void cotch(){System.out.println("猫抓老鼠");}
}
package jicheng;public class dog {public void lookhome () {System.out.println("狗看家");}
}
package jicheng;public class husky extends dog{public void breakhome(){System.out.println("哈士奇在拆家");}
}
package jicheng;public class lihuacat extends cat{
}
package jicheng;public class Teddy extends dog{public void touch(){System.out.println("泰迪touch");}
}
package jicheng;public class TEXT {public static void main(String[] args) {//创建布偶猫对象buoucat rd = new buoucat();rd.eat();rd.drink();rd.cotch();System.out.println("==============");//创建哈士奇对象husky d = new husky();d.lookhome();d.breakhome();}
}
运行结果:
注意点:
子类到底能继承父类的哪些类容?
成员变量都可以被继承下来,但是能不能用还要具体看。
一个类要被使用,要先把字节码文件加载到方法区
成员变量内存的继承情况:
如下图:继承内存图:和之前有两处不一样,在方法区加载字节码文件的时候它会把父类也加载过来。堆内存中,在创建对象的时候,里面是有一部分从父类继承过来的成员变量,还有一部分是存储子类的成员变量。
在Java虚拟机中有一个“保洁阿姨”也就是垃圾回收器,会在合适的时候把垃圾清理掉。
如下图:当“老爹”用的private,“儿子”就调用不了,但是也会把父类加载出来
成员方法的内存继承情况:
成员方法的继承,当方法比较多的时候,一个一个的继承太不切实际。顶层的方法会抽取经常用的方法构成一个虚方法表,这个方法表是非private,非static,非final的。在底层在调用的时候,直接在虚方法表中找:
内存:
子类继承父类的方法,父类的方法能够加载到虚方法表中就可以被继承,不能够加载到虚拟方法表中就不能被调用。
内存分析工具在这个视频37分27秒处:面向对象进阶-06-子类到底能继承父类中的哪些内容_哔哩哔哩_bilibili
继承中访问的特点:
成员变量的访问特点:就近原则
(this是在本类成员变量里面找)
成员方法的访问特点:
和成员变量访问特点相似
方法的重写:
方法的重写:本质上是覆盖了虚方法表中的方法,如下图:
第5条第6条,不严谨,实际上只有被添加到虚方法表中的方法才能被重写。!!!!!!!
案例:利用方法重写设计继承结构-》这个视频的36分27秒开始面向对象进阶-07-继承中成员变量和成员方法的访问特点_哔哩哔哩_bilibili
继承中构造方法的访问特点:
构造方法部分:面向对象进阶-08-继承中的构造方法和thissuper关键字_哔哩哔哩_bilibili
案例:带有继承结构的标准Javabean类
案例后面补:在这个视频的20分30秒处面向对象进阶-08-继承中的构造方法和thissuper关键字_哔哩哔哩_bilibili