java第一阶段-JavaSE-Day10-继承的注意事项,final关键字

本文详细介绍了Java中的继承关系,包括子类如何调用父类构造方法以初始化父类成员变量,以及this和super在构造方法中的使用规则。此外,还探讨了Java单继承特性及多层继承的概念,并解释了为何Java不支持多继承的原因。同时,讲解了final关键字的作用,它可以修饰变量、方法和类,使得元素成为最终状态,不可修改或重写。通过对final的使用,确保了代码的安全性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、继承关系成员的访问

(一)继承中构造方法的关系

        1.概述

        父类的构造方法子类不能够继承,只能调用父类的构造方法

        子类会继承父类中的数据(成员变量),可能还会使用父类的数据。所以子类初始化对象之前- -定要先完成父类数据的初始化.子类是如何初始化从父类中继承过来的数据呢?

        每一个子类构造方法的第一- 条语句默认都是: super() 表示访问父类的空参构造,父类继承过来成员都赋的事默认值

        每创建一一个子类对象,都会调用父类的构造方法,目的就是为了初始化父类那部分成员变量的.我们每次创建子类自己没有显示的调用父类的构造方法,其实是系统默认在子类构造方法第一句,加了:super()调用的是父类的空参构造.

        注意:

        1、子类中所有的构造方法默认都会访问父类中无参的构造方法.

        2、子类的构造方法中手动调用父类的其他构造,就不会默认访问父类的无参构造.

        3、如果在子类构造方法中,手动调用父类构造方法,必须写在子类构造方法的第一条语句.

        4.子类调用父类构造方法的格式: super([实参]);

public class Fu {
    public String name;
    public int age;

    public Fu(){
        System.out.println("Fu... 空参构造");
    }

    public Fu(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("fu...有参构造执行了");
    }
}
public class Zi extends Fu {
    public String sex;

    public Zi(){
        System.out.println("Zi...空参构造");
    }

    public Zi(String name,int age,String sex){
        super(name, age);
        this.sex = sex;
        System.out.println("Zi.....有参构造");
    }
}
public class UseZi {
    public static void main(String[] args) {
        Zi z = new Zi();
        Zi z1 = new Zi("张三",18,"男");
    }

}

        this和super调用构造方法区别:

        this也可以访问构造方法,但是只能访问本类的构造方法.格式:this([实参])

        super也可以访问构造方法,但是只能访问父类的构造方法.格式: super([实参])

        1. this语句和super语句不能同时出现. this语句和super语句都必须出现构造方法的第一-行

        2.一个构造方法无论手动显示调用this语句还是super语句,系统都不在添加:super()

        3.不要写出this语句的循环调用

public class Fu {
    public String name;
    public int age;

    public Fu(){
        System.out.println("Fu... 空参构造");
    }
}
public class Zi extends Fu{
    public String sex;

    public Zi(){
        //this("男");
        System.out.println("Zi...空参构造");
    }

    public Zi(String sex){
        this();
        //super();
        this.sex = sex;
        System.out.println("Zi...有参构造");
    }
}
public class UseZi {
    public static void main(String[] args) {
        Zi z = new Zi("男");
    }
}

        this&super的使用总结(简答题)

        成员变量:

                -this.成员变量一既可以访问本类成员变量,也可以访问父类的

                -super .成员变量一只能访问父类成员变量

        成员方法:

                -this.成员方法一既可以访问本类成员方法,也可以访问父类的

                -super .成员方法一访问父类成员方法

        构造方法:

                -this(_)一 访问本类构造方法 this( )

                -super(_) -访问父类构造方法 super()

        2.继承的注意事项

        1)、私有的成员不能被继承(不能被直接访问)

                ①.父类中有一一些私有成员,不能在子类中直接使用

                ②.其实在子类对象中,仍然包含了父类中定义的私有成员变量

                ③.只不过在子类中,不能直接访问父类中定义的私有成员变量,只能通过setter和getter方法操作

        2)、父类中的构造方法,不能继承

                原因:父类的构造方法需要和父类的类名-致、子类的构造方法需要和子类类名-致,父类和子类的类名不一样。因此无法继承,名称有冲突。Zi z= new Fu();编译报错

                父类的构造方法用于给父类的成员变量赋值,子类的构造方法用于给子类的成员变量赋值,子类的成员变量较多,使用父类的构造方法无法将子类中所有的成员变量都进行赋值,因此不继承父类的构造方法.

                解决:子类不继承父类的构造,但是可以[调用]父类的构造方法。super(实参)语句.

        3.java语言中继承的特点

        1)、java支持单继承,不支持多继承,java支持多层继承

                单继承: -一个子类只能继承一个父类(-个孩子只能有生物学上的亲爹)

                不能多继承:一个子类不能同时继承多个父类

                可以多层继承: A类可以继承B类,B类可以继承C类,A类中拥有B、C类中的所有属性和方法。

                ctrl+h:查看一一个类的体系结构

        说明:越是顶层的类,定义的功能越是共性功能,功能和属性就越少;越是底层的类,定义的特有功能和属性就越多,就更加强大。学习一个体系结构的时候,先学顶层的类,共性功能学习完,学习底层特有的方法即可;使用一个类创建对象的时候,选择底层的类型,功能更多更强大。

        Object类是java中根类(基类),所有java类要么直接继承Object,要么间接的继承自0bject.

如果我们定义一个类没有显示指明父类是谁默认它的父类就是0bject

        2、不能多继承原因:

        如果支持多继承,那么可能一一个子类继承了两个父类,两个父类中有相同的方法声明,却拥有不同的方法实现。子类继承之后,就不知道该走哪个父类的方法实现了。 (安全隐患)

        单继承性如下图:

        多层继承如下图:

二,final关键字

        1.概述

        final是一个关键字最终的意思主要 用来修饰java资源的。

        被他修饰的元素变成了最终元素,不能修改。

        可以修饰变量方法类

        变量:

                最终变量-----变量不能改变 [ 变相的成为了常量] 这就 是所谓的常量符号

        特点:

                最终变量只能赋值- -次

                值不可改变

                常量符号命名规范:全部大写,多个单词之间使用下划线连接

        方法:

                最终方法-----方法不能被改变[功能就定死]

                场景:父子之间,如果父类的方法不想被子类重写,就可以使用final修饰父类的方法

        特点:

                最终方法不可以被重写,可以被继承

        类:

                最终类不能改变

                场景:如果-一个类你不想让他拥有子类,在定义这个类的时候使用final修饰即可

        特点:不能 被继承

public class Animal {
    public final void eat(){
        System.out.println("吃");
    }
}
public class Dog extends Animal {
   /* public final void eat(){
        System.out.println("chi");
    }*/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值