JAVA(9)继承与多态

继承与多态 、抽象类、接口

继承:

  • 继承是类与类的一种关系
  • java中的继承是单继承
继承的好处:
  • 子类拥有父类的所有属性和方法。(修饰符不能是private)
  • 实现代码的复用
语法规则:
class  子类  extends 父类 {
......
}
java中的方法重写:

如果子类对继承父类的方法不满意,是可以重写父类的方法的,当调用方法时会优先调用子类的方法。

  • 语法规则:
    返回值类型、方法名、参数类型及个数 都要与父类继承的方法相同,才叫方法的重写。

  • java中的继承初始化顺序
    初始化父类再初始化子类
    先执行初始化对象中的属性,再执行构造方法中的初始化

java中的final的使用
  • final关键字做标识有“最终的”含义。
  • final可以修饰类、方法、属性、变量
  • final修饰类,则该类不能被继承
  • final修饰方法,则该方法不允许被覆盖(重写)
  • final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
    final修饰变量,则该变量的值只能赋一次值,即变为常量
java中的super的使用

super关键字:
在对象的内部使用,可以代表父类对象。
1、访问父类的属性
super.age
2、访问父类的方法
super.eat();

  • 子类的构造的过程当中必须调用其父类的构造方法。(隐式使用了super)
  • 如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
  • 如果显示的调用构造方法,必须在子类的构造方法的第一行。
  • 如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
java中的object类
  • object类是所有类的父类,如果一个类没有使用extend是关键字明确标识继承另外一个类, 那么这个类默认继承object类。

  • object类中的方法,适合所有子类。

  • object类的几个重要方法:
    1、toString()方法

    • 在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
    • 可以通过重写toString()方法表示出对象的属性

    2、equals()方法

    • 比较的是对象的引用是否指向同一块内存地址。
    • Dog dog = new Dog();
    • 一般情况下比较两个对象时比较他的值是否一致,所以要进行重写。

Java中的多态

  • 继承是多态实现的基础
  • 对象的多种形态
  • 引用多态:
    父类的引用可以指向本类的对象
    父类的引用可以指向子类的对象
    Animal obj1 = new Animal();
    Animal obj2 = new Dog();
  • 方法多态:
    创建本类对象时,调用的方法为本类方法
    创建子类对象时,调用的方法为子类重写的方法或者继承的方法

多态中的引用类型转换:
向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
Dog dog = new dog();
Animal animal = dog;
向下类型转换(强制类型转换),是大类型到小类型(存在风险)
Dog dog2 = animal;(不可以转换);
Dog dog2 = (Dog)animal;(可以,强制内型转换)
instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

if(animal  instanceof Cat ){
      Cat cat = (Cat) animal;
}else{ 
      ……
}
java中的抽象类
  • 语法定义:
    抽象类前使用abstract关键字修饰,则该类为抽象类。
  • 应用场景:
    a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法
    准确知道这些子类如何实现这些方法。(约束子类有哪些方法,并不关注如何实现的)
    b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性
  • 作用:
    限制规定(约束)子类必须实现某些方法,但不关注实现细节
  • 使用规则:
    a、abstract定义抽象类
    b、abstract定义抽象方法、只有声明,不需要实现
    c、包含抽象方法的类是抽象类
    d、抽象类中可以包含普通的方法、也可以没有抽象方法
    e、抽象类不能直接创建、可以定义引用变量

父类文件

// 抽象类 -- 父类
public abstract class TelPhone {
    // abstract定义抽象方法、只有声明,不需要实现
    public abstract void call();
    public abstract void sendMsg();
}

子类文件

public class CellPhone extends TelPhone {
    public void call() {
        System.out.println("打电话");
    }
    public void sendMsg() {
        System.out.println("发短信");
    }
}

java中的接口

  • 接口的概念:
    接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。

  • 类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

  • 接口的定义:
    和类定义不同,定义接口不再使用class关键字,而是使用interface关键字

  • 接口定义的基本语法:

[修饰符]  interface  接口名 [extends 父接口1,父接口2...]
{
        零个到多个常量定义。。。
        零个到多个抽象方法的定义。。。
}
  • 接口就是用来被继承、被实现的、修饰符一般建议使用public

  • 注意:不能使用private和protected修饰接口

  • 接口定义:
    1、常量:接口中的属性是常量,即使定义时不添加public static final 修饰符,系统也会自动加上
    2、方法:接口中的方法只能是抽象方法,即使定义时不添加public static final 修饰符,系统也会自动加上

  • 使用接口:
    一个类可以实现一个或多个接口实现接口使用implements关键字,java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以补充。

  • 继承父类实现接口的语法为:

【修饰符】class 类名 extends  父类  implements  接口1,接口2....
{
        类体部分// 如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。
}

//如果要继承父类,继承父类必须在实现接口之前

你可能感兴趣的:(JAVA(9)继承与多态)