(java) 面向对象 ---- 继承、重写与重载、抽象类、接口

xiaoxiao2025-10-25  10

面向对象共有三个特征:封装、继承、多态

一、【java继承  extends】

1.  Java不支持类的多继承,但支持多重继承。(支持接口的多继承)

2.  子类拥有父类非private的属性和方法。

3.  子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

4.  子类可以用自己的方式来实现父类的方法 ---- 重写。

5.  提高了代码的耦合性(继承的缺点,耦合度高说明代码之间联系紧密,代码独立性差)。

6. 子类有使用子类自己的(就近原则),子类没有使用父类的。

【关键字】:

1.  extends: 继承关键字。

2.  super: 使用super关键字来实现对父类成员的访问。

3.  this:  指向自己的引用。

4.  final :  (1)声明类,则这个类不能被继承,即最终类;(2)声明方法,则该方法不能被子类重写

二、【重写与重载】:

        重写(override):子类中出现了和父类中一模一样的方法时(方法名相同,参数个数类型相同,返回类型相同),则子类重写了父类中的方法。

重写的规则: (1)参数列表、返回类型必须与被重写方法的相同。

(2)访问权限不能比父类中被重写的方法的低。java四大权限由高到低(public protected default private)。

(3)父成员方法只能被它的子类重写。

(4)声明为final、static的方法不能被重写,static可以再次声明。

(5)子类、父类在同一个包中,子类可以重写父类中除声明private和final的方法;不在一个包中,只能重写父类中声明为。public、protected的非final方法。

        重载(overload): 在一个类里面,方法名相同,而参数列表不同。

重载的规则:

(1)必须改变参数列表(个数或类型不一样)。

(2)可以改变返回类型、访问修饰修饰符。

重载是一个类的多态性表现。重写是子类与父类的一种多态性表现。

 

三、【抽象类 abstract】

一个类没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类总结

(1)抽象类不能实例化(创建对象),只有抽象类的非抽象子类才能创建对象。

(2)抽象类中不一定包含抽象方法,具有抽象方法的类必是抽象类。

(3)抽象类中的抽象方法只是声明,不包含方法体。

(4)构造方法、类方法(用staticx修饰的方法)不能声明为抽象方法。

(5)任何子类必须重写抽象类的抽象方法,除非该子类声明为抽象类。

(6)关键字abstract 不能与private 、final共存 。

 

四、【接口 Interface】----  是抽象方法的集合,接口通常以interface来声明。

         三种引用类型: 数组、类、接口     (接口和类是不同的概念。类描述要对象的属性和方法,接口包含类要实现的方法)

         接口只描述所应具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

接口特性:(接口不能实例化)

(1)接口中的方法会被隐式的指定为public abstract(只能是public abstract,其他修饰符都会报错),接口中方法都是抽象的

(2)接口中的变量会被隐式的指定为public static final 变量(只能是public)

(3)子类必须覆盖掉接口中的所有抽象方法,子类才可以实例化,否则子类是一个抽象类

【接口与类】

      相似点

            (1)一个接口可以有多个方法。

            (2)接口文件保存在.java文件中,文件名使用接口名;接口的字节码文件保存在.class结尾文件中。

      区别:

            (1)接口不能实例化对象。

            (2)没有构造方法。

            (3)接口中的方法必须都是抽象方法,只能包含public static final 变量。

            (4)接口不是被类继承了,而是被类实现。

            (5)接口支持多继承。

  【接口与抽象类的区别】

            (1)抽象类中的方法可以有方法体(非抽象方法),接口中的方法都是抽象方法。

            (2)抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是public static final类型的。

            (3)一个类只能继承一个抽象类,而一个类可以实现多个接口。

            (4)接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类可以有。

接口多态程序:(接口作参数)

/* * USB接口: * 方法: 开、关 */ public interface USB { public abstract void open(); public abstract void close(); } /* * 鼠标类 实现USB接口类 * 方法:开、关 */ public class Mouse implements USB{ public void open(){ System.out.println("开启鼠标"); } public void close(){ System.out.println("关闭鼠标"); } } /* * 笔记本类 * 方法:开、关、使用USB设备 */ public class Computer { public void openComputer(){ System.out.println("笔记本打开"); } public void closeComputer(){ System.out.println("笔记本关闭"); } // 具体使用哪一个USB 设备不知道,需要输入设备的接口类型 // 接口当做参数, 接口的实现类 可以有很多个 只要满足接口规范,那么笔记本可以连入许多种类的设备(即可无限扩展) public void useUSB(USB usb){ usb.open(); usb.close(); } } /* * 键盘类 USB接口实现类 * 功能:重写抽象方法 */ public class Keyboard implements USB{ public void open(){ System.out.println("开启键盘"); } public void close(){ System.out.println("关闭键盘"); } } /* * 接口使用--笔记本案例 * 1.事物 * 笔记本 USB(接口) USB设备(鼠标、键盘) * 2.事物的属性 * 笔记本:开、关、使用USB设备 * USB接口:开、关 * USB设备:必须满足USB接口规范 开、关 * 3.事物间的联系 * 笔记本:调用外部USB设备 * USB接口:外部设备都是它的实现类 * */ public class Test { public static void main(String[] args) { // 创建Computer类型对象 Computer com = new Computer(); com.openComputer(); // 打开笔记本 // 创建Mouse 类型对象 Mouse mou = new Mouse(); com.useUSB(mou); // 连接鼠标设备 使用了接口的多态 // 创建Keyboard类型对象 Keyboard ke = new Keyboard(); com.useUSB(ke); // 连接键盘设备 使用了接口的多态 com.closeComputer(); // 关闭笔记本 } }

 

转载请注明原文地址: https://www.6miu.com/read-5038511.html

最新回复(0)