第27节 Java抽象类和抽象方法(abstract)

#第27节 Java抽象类和抽象方法(abstract)

##Abstract类与abstract方法
用关键字abstract修饰的类称为abstract类(抽象类)。如:
abstract class A {

}

用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:
abstract int min(int x,int y);

###注意事项
1、和普通的类相比,abstract类可以有abstract方法,也可以有非abstract方法。
2、对于abstract类,我们只能声明,不能使用new运算符创建该类的对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象的方法,给出方法体。
3、abstract类也可以没有abstract方法。
4、如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承这个abstract方法。
5、对于abstract方法,只允许声明,不允许实现。

示例:
A.java

public abstract class A {
	void eat(){
		System.out.println("eat");    //非抽象类方法
	}
	abstract int getMax();    //抽象类方法,没有方法体
}

###主类Demo25

不能进行初始化,因为A是一个抽象类,抽象类不能直接调用它的构造方法产生对象
在这里插入图片描述

新建一个B类继承于A
B继承A必须重写
在这里插入图片描述
B.java继承了A后,实现的抽象方法

public class B extends A{
	@Override
	int getMax() {
		int a =10;
		int b = 20;
		if(a>b){
			return a;
		}else {
			return b;
		}
	}
}

##抽象类和抽象方法与多态紧密的结合
定义一个父类Car

public abstract class Car {
	abstract void cautionSound();
}

定义子类PoliceCar

public class PoliceCar extends Car{
	@Override
	void cautionSound() {
		System.out.println("zhua...zhua...zhua");
	}
}

定义子类FireCar

public class FireCar extends Car{
	@Override
	void cautionSound() {
		System.out.println("huo...huo...huo");
	}
}

主类Demo25

public class Demo25 {
	public static void main(String[] args) {
		Car car = new PoliceCar();
		car.cautionSound();
		car = new FireCar();
		car.cautionSound();
	}
}

在这里插入图片描述

##面向抽象编程

在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成。

使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。

所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。

新建SoundMaker类
在这里插入图片描述
运行结果
在这里插入图片描述
修改代码后
在这里插入图片描述

运行结果
在这里插入图片描述
发现SoundMaker不管传什么过来,它只管发声,如果想发不同的声音就传不同的过来,这就是上转型对象和多态的魅力,永远接收一个父类的对象,可以把不同的子类赋给我,然后去调用共有的实例方法,就能达到你想要的目的。

猜你喜欢

转载自blog.csdn.net/bravery2288/article/details/82852717
今日推荐