栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、继承关系成员的访问 (一)继承中构造方法的关系

        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 {
   
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号