• 2.面向对象基础-04继承


    一、继承 extends的概念

      1.继承是指一个类包含另一个类的属性和行为,使其成为自己的属性和行为

      2.通过继承,子类自动用有父类的所有普通成员(成员变量和成员方法)

        父类(基类)中保留共性,子类(派生类)中保留特性(重用)

     1 import java.util.*;
     2 public class Main
     3 {
     4     public static void main(String[] args)
     5     {
     6         zi z = new zi("lian",20,"male");
     7         System.out.println(z.toString());
     8     }
     9     
    10 }
    11 class fu
    12 {
    13     public String name;
    14     public int age;
    15     public String sex;
    16     public fu(String name, int age, String sex) 
    17     {
    18         super();
    19         this.name = name;
    20         this.age = age;
    21         this.sex = sex;
    22     }
    23     @Override
    24     public String toString() 
    25     {
    26         return "name : "+name+"
    "+
    27                 "age : "+age+"
    "+
    28                 "sex : "+sex+'
    '+
    29                 "--------------";
    30     }
    31     
    32 }
    33 class zi extends fu
    34 {
    35 
    36     public zi(String name, int age, String sex) 
    37     {
    38         super(name, age, sex);
    39     }
    40     
    41 }

    二、子类的构造方法

      1.父类构造方法不能被子类继承

      2.子类的构造方法中必须调用父类的构造方法

      3.super()表示在子类对象中对其包含的父类对象的引用

        -super(参数)表示调用父类构造方法

        -super.function表示调用父类成员方法

    三、类成员的可访问性

      

       1.protected:

        子类可以直接访问父类的protected成员,外界类不能访问其他类的protected成员;

      谨慎使用protected:

        因为他相当于允许子类直接操作父类对象,破坏了父类的封装性,因此,应优先使用父类的公有成员函数来操作子类中的父类对象

      

      2.继承自Product的food和clothes的内存占用

     四、继承的实现|Override

    (一)重写(Override):子类覆盖父类的同名方法

      1.要求:

          (1)两同:必须和被重写方法有相同的名称、参数列表;

          (2)两小于等于:

            ①子类方法的返回值类型比父类方法的返回值类型更小或相等

            ②子类方法声明抛出的异常要比父类方法抛出的异常类更小或相等

          (3)一大于等于:子类方法的访问权限要比父类方法的访问权限更大或相等。即,重写方法不能使用比被重写方法更严格的访问权限。

    (二)方法重载(Overload)

      1.概念:当多个方法具有相同的名字并含有不同的参数(个数、类型)时,产生重载。

      2.调用时根据参数不同加以区分(静态多态性)

    五、final关键字

      1.final变量:常量

      2.final成员变量:初始化后不能被改变

      3.final方法形参:不能修改形参的值

        -对于形参是对象变量而言,final表示不能修改该形参所指的对象(即该引用值),但是对象的内容可以改变

      4.final方法:阻止方法被重写

      5.final类:阻止类被继承(final类的方法全是final方法)

    六、对象转型

    (一)问题引入:如何让Shop管理多种不同类型的产品(食物、服饰)

      1.为食物、服饰各维护一个数组Product[] 、Food[] 、Clothes[]

        -大量代码重复:可维护性差

        -实现针对所有产品的操作变得极为复杂

      2.实现核心:对象转型+多态

    (二)对象转型

      1.is-a关系:每一个子类对象“is-a”父类对象

      2.对象转型:子类类型和父类类型之间的转换关系

      3.两种转型关系:

      4.instanceof:判断该引用所指对象是否属于该类的对象

      5.通过父类引用不能访问子新增的成员

     1 import java.util.*;
     2 public class Main
     3 {
     4     public static void main(String[] args)
     5     {
     6         //向上转型 父类类型 = 子类对象
     7         Product p = new Clothes("shoes",100);
     8         
     9         System.out.println(p instanceof Product);
    10         System.out.println(p instanceof Clothes);
    11         
    12         System.out.println("---------------");
    13         
    14         //向下转型 子类类型 = (子类类型)父类引用
    15         Clothes c = (Clothes)p;//强制转换
    16         
    17         System.out.println(c instanceof Product);
    18         System.out.println(c instanceof Clothes);
    19         
    20         //基本数据类型的转换
    21         int i = (int)1.123;//转换后数据变为目标类型
    22         
    23         //对象转型casting
    24         Product p1 = new Clothes("shirt",300);//转换后对象仍未原类型
    25         
    26     }
    27     
    28 }
    29 class Product
    30 {
    31     public String name;
    32     public double price;
    33     public Product(String name, double price) 
    34     {
    35         super();
    36         this.name = name;
    37         this.price = price;
    38     }
    39     
    40 }
    41 class Clothes extends Product
    42 {
    43 
    44     public Clothes(String name, double price) 
    45     {
    46         super(name, price);
    47     }
    48     
    49 }

        

  • 相关阅读:
    报错解决——ctypes.ArgumentError: argument 1:……….. : wrong type
    报错解决——OSError: libdarknet.so: cannot open shared object file: No such file or directory
    报错解决——make: *** No targets specified and no makefile found. Stop
    dos2unix命令
    报错解决——linux下执行sh出现异常"syntax error: unexpected end of file"
    Python中使用SMTP发送邮件以及POP收取邮件
    常用的邮箱服务器(SMTP、POP3)地址、端口
    Python日期与字符串互转
    Mac OSX上卸载Anaconda
    uWSGI+APScheduler不能执行定时任务
  • 原文地址:https://www.cnblogs.com/Chenury/p/14949189.html
Copyright © 2020-2023  润新知