Java中static静态变量--继承等相关知识

目录

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

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值