抽象

在面向对象中,对象的描述都是使用类表现的,但是一个类并不能完美的描述一个对象,比如声明类一个动物的类,因为每一种动物都属性特征都会有区别,比如行走这个行为在某些动物身上是飞,有的是跑,有的是游,这个时候就需要将这个行为抽象化,由继承的子类去实现。


- 所有抽象类的方法都不能实例化对象
- 所有继承抽象类的子类必须实现父类的抽象方法与构造器
- 抽象类具体的属性与方法可以在子类中直接使用,与普通继承一样


public abstract class Employee {
	private String name;
	private int age;
	
	public Employee(String name, int age){
		this.setName(name);
		this.setAge(age);
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	//抽象方法,由子类去实现
	public abstract String toString();
}


public class Salary extends Employee{
	//实现父类的构造器
	public Salary(String name, int age) {
		//调用父类的抽象方法
		super(name, age);
	}

	//实现父类的抽象方法
	public String toString()  {
		return "我叫"+this.getName() + ", 今年" + this.getAge() + "岁";
	}
}


public class Main {

	public static void main(String[] args) {
		//实例化对象
		Salary salary = new Salary("张三",22);
		//调用 toString 方法
		System.out.println(salary.toString());

	}

}


上面的例子中看不到抽象大法的好处,把抽象与多态结合起来使用,真的是很妙。

public class Main {

	public static void main(String[] args) {
		//声明抽象类,实例化子类
		Employee emp = new Salary("李四", 30);
		//这个时候就可以正常的调用子类的方法
		//因为抽象类的中的抽象方法,继承的子类必须去实现
		//使用中知道抽象类中没有实现这个方法,但是实例化对象是子类,子类肯定实现了。
		//子类继承了父类所有属性与方法,这个时候子类与父类可以说是一模一样的。
		System.out.println(emp.toString());
	}

}