java 抽象方法,抽象类

最近在看JAVA核心技术卷1,下面是我自己的理解,如果有不对的地方,欢迎大家指正

抽象类和抽象方法都由abstract关键字标记,拥有抽象方法的类就肯定是抽象类,但是抽象类不一定包含抽象方法

抽象方法

先来看下抽象方法的写法

// 类和方法都由abstract 标记,因为包含抽象方法的类肯定是抽象类,所以类也要由abstract 标记
public abstract class Person{
	// 抽象方法没有方法体{},不需要具体实现其中的内容
	// 抽象方法应该被定义为public或protected,如果定义为private则不能被子类继承,就没法实现这个方法
	// 如果不指定访问权限,则默认为public
	public abstract void getDescription();
}

抽象类

上面已经说过了,拥有抽象方法的类就肯定是抽象类,但是抽象类也可以不包含抽象方法

我们已经有父类和子类了,一般会继承父类来创造想要的特定实例,那为什么还会提供一个高层次的抽象类呢?这是因为非抽象方法都是要有具体实现的,而我们有时候只是知道一组子类的共同特性,但还不清楚具体要怎么实现,而定义成抽象方法就不需要实现了。子类只需要继承抽象类,再实现其抽象方法即可。

举个例子
比如学生类(Student),员工类(Employee),人类(Person)
Person类是Student类,Employee类的父类
我们都知道无论是学生还是员工他们都有姓名,年龄,以及个人性格,
姓名和年龄我们明确知道要怎么实现,所以定义成普通方法即可,但是个人性格我们还不太清楚,所以定义成抽象方法

public abstract class Person{
	private String name;
	private int age;
	public Person(String name ,int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return this.name;
	}
	public int getAge(){
		return this.age;
	}
	public abstract String getDescription();
}

public class Student extends Person(){
	public abstract String getDescription(){
		return "a student";
	}
}

public class Employee extends Person(){
	public abstract String getDescription(){
		return "a Employee ";
	}
}

抽象类的使用

  • 抽象类不能被实例化,如果将一个类声明为abstract,就不能创建这个类的对象,new Person()会报错,但可以创建具体的子类对象;

  • 扩展抽象类的两种选择

      在子类中保留抽象类中的部分或所有抽象方法,扔不具体实现,这样就必须将子类也设置成抽象类;
      在子类中定义全部方法,这样子类就不是抽象类了。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章