【Java面向对象】抽象类详解

主宰稳场 提交于 2020-01-30 22:53:26

所谓的抽象类,其实就是一种概念,只不过这种概念需要我们用Java编程语言将其表达出来而已。  就好比汽车中的概念汽车,它只存在于一张图片、一个视频中,我们并不能看到它的实体,但通过这种概念,就可以造出实际的汽车,故概念汽车不能New出对象,等等。

  以上用“概念汽车”来类比“抽象类”,由此更加快速地理解抽象中的各个特性。

抽象类语法格式:

abstract class 类名 {
	···
}

抽象类的特性

抽象类特点:

  1. 抽象类不能实例化 (new)
  2. 有抽象方法的类,一定是抽象类
  3. 抽象类中可以没有抽象方法,即可以包含抽象方法和非抽象方法
  4. 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。

抽象类的成员特点:

  • 成员变量
  • 可以有成员变量
  • 可以有常量
  • 成员方法
  • 可以有抽象方法
  • 可以有非抽象方法
  • 构造方法
  • 可以有构造方法的,需要对抽象类的成员变量进行初始化
//验证抽象类的特点
abstract class Animal {
	String name = "哮天犬"; //成员变量
	final int num = 10; //成员常量
	
	public Animal() { //构造方法
		System.out.println("我是抽象类的构造方法");
	}
	
	public abstract void eat(); //抽象方法
	
	public void run() {} //非抽象方法(此方法时空实现)
}

class Dog extends Animal {
	public void barking() {
		System.out.println(name);
		System.out.println(num);
	}
	
	@Override
	public void eat() {
		//空实现也是实现
	}
}

public class Main {
	public static void main(String[] args) {
		Dog d = new Dog();
		d.barking();
	}
}
/*输出:
	我是抽象类的构造方法
	哮天犬
	10
*/

抽象方法的特性

语法格式:
  public abstract 返回值类型 方法名(参数);

abstract不能与以下关键字共同修饰一个方法:

  1. abstract不能与private共同修饰一个方法。
  2. abstract不能与static共同修饰一个方法。
  3. abstract不能与final共同修饰一个方法。

抽象方法特性:

  1. 抽象方法没有方法体({}),抽象方法不能被声明成 final 和 static

权限修饰符 abstract 返回值类型 方法名 ( );
例如:public abstract void eat();

  1. 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

快速理解抽象方法的使用:

//研发部员工 
abstract class Developer {
	public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}

//JavaEE工程师
class JavaEE extends Developer{
	public void work() {
		System.out.println("正在研发淘宝网站");
	}
}

//Android工程师
class Android extends Developer {
	public void work() {
		System.out.println("正在研发淘宝手机客户端软件");
	}
}


//测试类
public class Main {
	public static void main(String[] args) {
		JavaEE ee = new JavaEE();
		ee.work();
		
		Android an = new Android();
		an.work();
	}
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!