Java学习笔记——抽象类

在整个Java的继承体系中,层次越高的类所具有的通用性越高,甚至可能更加抽象。在某种程度上而言,祖先类更加通用,人们在大部分时间里都将祖先类作为其他类的一中派生。

在Employee类和Student类中,每个人都会有一些诸如名字这样的属性,所以我们为什么不把getName这样的方法放置在地位更高的通用父类中》?

现在再添加一个getDescription方法,他可以返回一个人的一些基本信息。例如:an Employee with salary of 12,333
a Student majoring in Science

如果我在Student类和Employee类的共同父类Person中实现这个方法该如何进行呢?我可以让Person.getDescription()方法返回一个空的字符串,但同时,也可以让Person类家关键字abstract,这样就完全不需要去具体的对这个方法进行实现了。

public abstract class Person{
		public abstract getDescription();
}//抽象方法定义

无论是抽象类还是抽象方法,都需要添加关键字abstract

在抽象类的内部还可以包含具体的数据和具体方法,例如,Person类可以保存姓名的实例域和一个返回姓名的具体方法。

     public abstract class Person{
     			private String name;

                public Person(Sring name){
                this.name=name;
}
				public String getName(){
				return name;
}
        		public abstract getDescription();
        }

类即使不含抽象方法,也可以将类声明为抽象类,但是抽象类不能被实例化,例如说上述的抽象类,我使用表达式 new Person("Reus")是会被编译器报错的。

但是我可以通过具体子类来对抽象类进行实例化,例如Person p=new Employee(“Rues”,11);是合法的

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

一个人完整的定义抽象超类Person和两个具体子类的方法程序如下;供参考

主方法所在的类:
public class StringTest {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Person[] p=new Person[2];
	
	p[0]=new Employee("Reus",11);
	p[1]=new Student("Brant","football");
	
	for(Person pa:p)
		System.out.println(pa.getName()+","+pa.getDescription());
	}
}

Person抽象父类:
public abstract class Person {
public abstract String getDescription();

private String name;

public Person(String name) {
	this.name = name;
}

public String getName() {
	return name;
}

}

Employee子类:

public class Employee extends Person implements Comparable {
private String name;
private double salary;

public Employee(String name,double salary) {
	super(name);
	this.name=name;
	this.salary=salary;
}

public String getName() {
	return name;
}

public double getSalary() {
	return salary;
}

public void raiseSalary(double byPercent) {
	double raise=salary*byPercent/100;
	salary+=salary;
}

public int compareTo(Employee Other) {
	return Double.compare(salary, Other.salary);
}

public String getDescription() {
	return String.format("a Employee called "+name+" whose salary is "+salary);
}

}

Student子类:
public class Student extends Person {

private String name;
private String major;

public Student(String name,String major) {
	super(name);
	this.name=name;
	this.major=major;
	
}

@Override
public String getDescription() {
	// TODO Auto-generated method stub
	 return String.format("a Student names "+name+" major in "+major);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值