zoukankan      html  css  js  c++  java
  • 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 }

        

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/Chenury/p/14949189.html
Copyright © 2011-2022 走看看