将往观

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、继承 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+"\n"+
27                 "age : "+age+"\n"+
28                 "sex : "+sex+'\n'+
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 }

 

 

 

    

posted on 2021-06-30 15:43  将往观  阅读(48)  评论(0编辑  收藏  举报