抽象类

包含一个或多个抽象方法的类本身必须被声明为抽象的。

除了抽象方法之外,抽象类还可以包含具体数据和具体方法。

类即使不含抽象方法,也可以将类声明为抽象类。

抽象类不能被实例化。

可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。

 例:

Person.java

package cn.java.study.grammar;

public abstract class Person {
	public abstract String getDescription();
}


Student.java

package cn.java.study.grammar;

public class Student extends Person{
	
	private String name;
	private int age;
	
	
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return "name:" + name + "  age:" + age;
	}
	
	public static void main(String[] args){
		Person person = new Student("Luccy", 10);
		person.getDescription();
		System.out.println("description:" + person.getDescription());
	}

}


Person p = new Student("name", 10);

 这里的p是一个抽象类Person的变量,Person引用类一个非抽象子类Student的实例。


p.getDescription()

由于不能构造抽象类Person的对象,所以变量p永远不会引用Person对象,而是引用Student这样具体子类对象。


是否可以省了Person超类中的抽象方法,而仅在Student子类中定义getDescription方法呢?

如果这样的话,就不能通过变量p调用getDescription方法类。编译器只允许调用在类中声明的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值