当前位置: 代码迷 >> 综合 >> Java-Week3-继承与多态
  详细解决方案

Java-Week3-继承与多态

热度:55   发布时间:2023-12-15 14:22:27.0

3.1 类的继承

3.1.1 相关概念

  • 基类(base class) 
    • 也称超类(super class)或父类(parent class),是被直接或间接继承 的类
  • 派生类(derived-class)
    • 也称子类 (sub class),是继承自其他类而得到的类
    • 继承所有父类的属性和行为,也可以增加变量和方法,也可以覆盖 (override)继承的方法

3.1.2 继承的特点 

  •  通过继承,新类拥有已有类的所有功能
  • Java只支持类的单继承,即每个子类只能有一个直接父类
  • 继承机制可以提高程序的抽象程度,提高代码的可重用性

3.1.3 Object类

  • 如果一个类的声明中没有使用extends关键字,则系统默认其为Object类的子类
  • Java中所有类的直接或间接父类,处在类层次最高点
  • public final Class getClass() : 获取当前对象所属的类信息,返回Class对象
  • public String toString() : 返回当前对象本身的有关信息,按字符串对象返回
  • public boolean equals(Object obj):? 比较两个对象是否是同一对象,是则返回true

3.1.3.1 getClass 和 toString

package test;public class test {public static void main(String args[]){Hello h= new Hello();System.out.println(h); //test.Hello@15db9742System.out.println(h.getClass()); //class test.HelloSystem.out.println(h.toString()); //test.Hello@15db9742Class classh=h.getClass();System.out.println(classh.getName());//test.HelloSystem.out.println(classh.getSuperclass().toString());//class java.lang.Object}
}

3.1.3.2 equals

同一和相等 

  • 两个对象具有相同的类型及相同的成员值,则称二者相等(equal)
  • 两个引用类型的变量引用的是同一个对象,则称这两个变量同一(identical)
  • 同一一定相等,相等不一定同一
  • Object类中的 equals() 方法的定义如下:
public boolean equals(Object x) 
{ return this == x; 
}

equals 重写

  • ·
  • String类中已经重写了Object类的equals方法,可以判别两个字符串是否内容相同
    • 人物 a = new 人物();
      人物 b = new 人物();
      a.equals(b);//b由人物类强制转换到Object类

       

3.1.4 隐藏和覆盖

  • 隐藏

    • 成员变量只能隐藏
    • 静态(static)只能隐藏,不能覆盖,毕竟是类变量嘛
    • 子类对象不仅拥有子类重定义的成员变量,而且还拥有父类原有的同名成员变量,只是这些成员变量感觉上被“隐藏”了。
  • 覆盖

    • 针对方法而言
    • 对于覆盖,子类对象只拥有覆盖后的成员方法
  • 无论隐藏或覆盖,都可以使用“super”去访问父类的成员变量或方法。

隐藏成员的访问

             

覆盖方法的访问

          

覆盖父类的方法时,不可以降低方法的访问权限

 

构造方法中的继承问题

      

        

        

       

3.2 对象的上转型对象

3.2.1 定义

上转型——用父类声明的对象指向子类创建的实体,此时称为“上 转型”操作,而父类对象是子类对象的“上转型”对象。

父类 a;
子类 b = new 子类();
a = b;   //a是b的上转型对象

下转型——与上转型相反

 3.2.2 对象类型与“类型转换”

上转型:隐式类型转换——只要类A是类B的直接/间接父类

下转型:显示类型转换——必须确保父类对象指向是子类的实体,且要进行显式类型转换

强调:

  • 如果子类覆盖了父类的某个方法,那么上转型对象调用这个方法时, 一定是调用了这个重写的方法
  • 由于静态方法只能被隐藏,因此访问父类的静态方法时不受限制 

 

***final成员变量的应用

  • 可以结合static定义一些程序中能直接使用的常量
    • public static final PI = 3.141592653589793;

       

  • 良好的编程习惯不提倡过多的使用static

***instanceof 运算符

 

3.3 多态性

方法的多态性:方法的重载

继承的多态性:应用上转型对象调用子类覆盖的方法,从而产生不同的行为

3.4 abstract类和abstract方法

用abstract修饰的类

abstract class A {
abstract int min(int x,int y);
}

特点

  • 抽象类可包含普通类所具有的任何成员,例如:构造方法,非abstract方法
  • 与普通类不同的是,抽象类可以有抽象方法(abstract方法), 并且对于抽象          方法,只允许声明,不允许实现
  • 抽象类是没有具体实例对象的类,不能使用new方法进行实例化; 要想使用抽象类,必须创建该类的子类,并且实现其中的抽象方 法(覆盖) ,然后使用子类的对象。也正因为如此,抽象类和抽象方法不能用final修饰。

应用 

  • 抽象类是对一系列子类的高层抽象,描述了这些类的公共属性和行为
  • 如果这些类都具有同一种行为,但行为的具体实施内容不同,那么可以在抽象类中将其定义为抽象方法,这样就强制子类必须给出这些方法的具体实现

Attention 

  • 一个抽象类的子类如果不是抽象类,则它必须覆盖父类中的所有抽象方法
  •  只有抽象类才能具有抽象方法,即:如果一个类中含有抽象方法, 则必须将这个类声明为抽象类
  • 抽象类中也可以包含非抽象方法
  • 抽象类中也可以没有抽象方法

3.5 super关键字

  • super代表“父类”
  • super可以在子类的构造方法中调用父类的构造方法
  • super可以在子类的方法中调用被隐藏的父类成员或者方法

 

 

 

 

 

  相关解决方案