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

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

一、【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(); // 关闭笔记本
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_39781462/article/details/83386809