自学内容网 自学内容网

Java入门:09.Java中三大特性(封装、继承、多态)02

2 继承

需要两个类才能实现继承的效果。 比如:类A 继承 类B

  • A类 称为 子类 , 衍生类,派生类

  • B类 称为 父类,基类,超类

继承的作用

  1. 子类自动的拥有父类的所有属性和方法 (父类编写,子类不需要再编写) 。 代码复用

    目前私有的属性和方法无法访问。

  2. 多态的基础。

继承语法

  • 先定义父类 (单独的类)

  • 在定义子类的同时,实现与父类的继承关系

class B{
    String name ;
    public void t1() {}
}
​
class A extends B{
    //String name ;
    //public void t1() {}
}
​
A a = new A();
a.name = "zs" ;
a.t1();

继承特点

  1. 继承具有传递性

    A extends B extends C

    A类中,既有B类的内容,又有C类的内容

  2. 基础具有不可逆性

    A extends B

    A类中,有B类的内容

    但B类中没有A类的内容。

  3. Java只支持单继承 (C++支持多继承)

    一个类只能继承一个父类。

    但可以连续继承 A extends B extends C

    A extends B A extends C 不可以的

3 子类对象的创建过程

  • 不存在父类对象这个概念

class A{
    String name ;
    public void t1(){}
}
class B extends A{
    int age ;
    public void t2(){}
}
​
new A(); //不算父类对象
new B() ;//这就是我们所说的子类对象
 
  • 尽管B对象中的name属性,是从A类中继承而来的

  • 但使用过程中,直接通过name名称就可以访问到。

  • 可以使用JOL工具来查看内存结果

4 super关键字

可以指定父类的内容 (属性,方法,构造方法)

一般情况下,在子类中,可以默认指定父类的内容。

  • 变量访问的顺序: 局部变量->类变量->父类变量->报错

    class B{
        String name1 ;
    }
    class A extends B{
        String name1 ;
        public void t1(){
            String name1 ;
            print(name) ;
        }
    }

    但有些情况必须使用super来指定父类的内容

  1. 子类中写了与父类中同名的属性和方法 (重写)

  2. 在子类的构造方法中,指定要调用的父类的构造方法

    在创建子类对象时,不仅仅子类对象的构造方法会被调用,父类的构造方法也会被调用

    是在子类构造方法的第一行被调用的。 (先调用子类的构造器,先执行完父类的构造器)

    默认会在子类构造方法的第一行,执行super(),表示调用父类的无参构造器

class A{
    String name ;
    public void t1(){}
}
​
class B extends A{
    
    public void t1(){}
    public void t2(){
        name = "ls" ;
        name = "zs" ;
        super.t1();
    }
}
class A{
    int a ;
    int b ;
    public A(int a , int b){
        this.a = a ;
        this.b = b ;
    }
    public void A(){}
}
​
class B extends A{
    int c ;
    int d ;
    public B(){}
    public B(int c , int d){}
    public B(int a , int b , int c, int d){
        //想将a和b交给父类的构造器
        //super()
        super(a,b);
        this.c = c ;
        this.d = d ;
    }
}
​
B b =  new B(10,20,30,40);

this和super关键字

  • 在使用上,this和super特点相似

  • 但本质上完全不同

  • this的本质,是一个参数变量,存储的是当前方法所属对应的地址。

  • super的本质,就是一个关键字,用来指定父类的内容。这个指定效果在编译后就没有了。

    而this是在运行时有所应用的。


原文地址:https://blog.csdn.net/a2018204587/article/details/142367983

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!