• java基础11 继承(super、extends关键字和重写,这三个要素出现的前提:必须存在继承关系)


    面向对象的三大特征:  

    1.封装   (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值。或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用)

    2.继承   (继承关系通过extends关键字体现)

    3.多态   (父类的引用指向子类的对象,或者接口的引用类型变量指向接口实现类的对象)


    一、继承

    1.1、继承的格式

        class 类名1 extends 类名2{
        
        }

    1.2、继承关系

    继承关系通过关键字extends体现的

    1.3、继承关系的注意事项

        1.父类私有的成员(成员变量或成员方法)不能被继承.(如果要获取成员变量的值,可以通过非私有成员方法获取)
        2.父类的构造函数是不能够被继承
        3.创建子类的对象时默认会先调用父类无参构造器.
        4.千万不要为了减少重复代码而去继承,只有真正存在继承关系时,才去继承

    1.4、附录

    1、父类有有参构造器,子类无有参构造器,会报错?
    答:子类实例化有参的对象时,默认调用父类的无参构造器,父类中存在无参构造器,不会报错,假如父类中没有无参构造器,
    只有有参构造器,那么需要在子类构造器中添加super关键字,super关键字括号里面填相应的参数,调用父类有参构造器
    
    2、为什么要调用父类的构造器?这样子做的意义何在?
    答:调用父类的构造器是可以初始化父类继承下去的属性的.
    注意:子类中如果有无参构造器,父类中一定也要有
     1 /*
     2 需求:有工人,农民,教师,科学家,服务生,其中,工人,农民,服务生只有基本工资.
     3      教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,
     4      请你写出相关类,将各种类型的员工的全年工资打印出来;
     5 */
     6 class People{
     7     private double BaseSal; //基本工资
     8      double Bonus; //奖金
     9     public People(){
    10 
    11     }
    12     public People(double BaseSal){
    13         this.BaseSal=BaseSal;
    14     }
    15     public double getBaseSal(){ //基本薪资
    16         return BaseSal*12;
    17     }
    18     public double getBonus(double sal){ //额外薪资
    19         return Bonus;
    20     }
    21     public double getYearSal(double sal){ //年薪
    22         return getBonus(sal)+getBaseSal();
    23     }
    24 }
    25 
    26 class Worker extends People{ //工人
    27     public Worker(double BaseSal){
    28         super(BaseSal);
    29     }
    30     public double getBonus(double sal){//额外薪资
    31         return Bonus;
    32     }
    33 }
    34 
    35 class Waiter extends People { //服务员
    36     public Waiter(double BaseSal){
    37         super(BaseSal);
    38     }
    39     public double getBonus(double sal){ //额外薪资
    40         return Bonus;
    41     }
    42 }
    43 
    44 class Scientist extends People { //科学家
    45     public Scientist(double BaseSal){
    46         super(BaseSal);
    47     }
    48     public double getBonus(double sal){ //额外薪资
    49         return getBaseSal()*(8/10);
    50     }
    51         
    52 }
    53 
    54 class Teacher extends People { //教师
    55     public Teacher(double BaseSal){
    56         super(BaseSal);
    57     }    
    58     public double getBonus(double sal){
    59         return 12*30*sal;
    60     }
    61 }
    62 class Farmer extends People { //农民
    63     public Farmer(double BaseSal){
    64         super(BaseSal);
    65    }
    66     public double getBonus(double sal){ //额外薪资
    67         return sal;
    68    }
    69 }
    70 
    71 class  Demo1{
    72     public static void main(String[] args) {
    73         Farmer f=new Farmer(1200);//
    74         Teacher t=new Teacher(2000);
    75         System.out.println("农民年薪"+f.getYearSal(0));//
    76         System.out.println("老师的薪资"+t.getYearSal(500));
    77         Waiter w=new Waiter(4000);
    78         System.out.println("服务员薪资:"+w.getYearSal(100000));
    79 
    80     }
    81 }

    二、super关键字

    2.1、概念

        super关键字代表了父类空间的引用

    2.2、super关键字的作用

     1.子父类中存在这同名的成员时,在子类中默认访问子类的成员,可以通过super关键字访问父类指定父类成员
     2.创建子类对象时,默认调用父类的无参构造器,可以通过super关键字调用父类中有参构造器

    2.3、super关键字调用父类的构造方法时,要注意的事项

     1.在子类的构造器中没有指定调用父类的构造方法,那么编译器会在子类构造器中默认添加一个super()
        2.super关键字调用父类构造函数时,该语句必须要是子类函数的第一语句
        3.super关键字与this关键字不能同时出现在一个构造函数中调用其他构造函数.因为两个语句都需要是第一个语句(第一行)

    2.4、super关键字与this关键字的区别

    1.代表的事物不一致
        1.super关键字代表的是父类空间的引用.
        2.this关键字代表是所属函数的调用对象.
    2.使用的前提不一样
        1.super关键字必须要有继承关系才能使用
        2.this关键字不需要存在继承关系也可以使用
    3.调用构造函数的区别
        1.super关键字是调用父类的构造函数
        2.this关键字是调用本类的构造函数.

    三、重写

    3.1、方法重写的前提

       必须存在继承关系

    3.2、方法重写的概念

       子父类出现同名的函数,这个我们就叫方法的重写

    3.3、什么时候需要使用重写方法

    父类的功能无法满足子类的需求.

    3.4、方法的重写需要注意的事项

      1.方法重写时,方法名和形参列表必须一致.
      2.方法重写时,子类的访问权限修饰符要大于或等于父类的访问权限修饰符
      3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型(引用数据类型),但是在基本数据类型中,子类和父类返回值类型要一致
      4.方法重写时,子类抛出异常类型要小于或者等于父类的异常类型.

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:http://www.cnblogs.com/dshore123/p/8805436.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    PowerShell笔记
    Windows难民安装docker的注意事项
    minix3使用轻快入门
    gentoo(贱兔) Linux作业系统的基本使用
    Artix Linux作业系统的使用~
    CentOS7搭建sftp
    Hello Wolrd
    Android开发技术周报 Issue#1
    Android开发技术周报 Issue#4
    Android开发技术周报 Issue#3
  • 原文地址:https://www.cnblogs.com/dshore123/p/8805436.html
Copyright © 2020-2023  润新知