一直以来,不是很了解abstract关键字的作用,最近才对其有了一些初步的认识和了解。
abstract--抽象,既可以修饰类,也可以修饰方法
以下是一些基本的认识和注意点:
1.抽象方法只有方法的声明
2.抽象方法是让子类必须实现的方法
3.抽象方法不能私有
4.抽象方法只能在抽象类中定义
5.抽象类不可以实例化对象,所以抽象类存在的意义是做父类
6.抽象类里面是可以没有抽象方法的
7.抽象类是可以有构造函数的
以下是具体的实例:
Person--父类
Student--子类
Test--测试
Person类:
package JavaAbstract;
//抽象方法只有方法的声明
//抽象方法是让子类必须实现的方法
//抽象类不可以有对象,不可以实例化,所以抽象类存在的意义是做父类
//抽象类里面是可以没有抽象方法的
public abstract class Person {
private String name;
//抽象类是可以有构造函数的
//public Person(){}
public Person(String name)
{
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//抽象方法不能私有
//抽象方法只能在抽象类中定义
public abstract String getDescription();
protected abstract String getDescription(int i);
}
Student类:
package JavaAbstract;
public class Student extends Person {
private String major;
public Student(String name,String major) {
super(name);
this.major = major;
}
@Override
public String getDescription() {
return this.getName()+"学生的专业是"+this.major;
}
@Override
protected String getDescription(int i) {
// TODO Auto-generated method stub
return null;
}
}
class Employee extends Person
{
private double salary;
public Employee(String name,double salary) {
super(name);
this.salary = salary;
}
@Override
public String getDescription() {
return this.getName()+"员工的工资是" + this.salary;
}
@Override
protected String getDescription(int i) {
// TODO Auto-generated method stub
return null;
}
}
Test类:
package JavaAbstract;
public class Test {
public static void main(String[] args) {
//Person p = new Person();错误,抽象类不能实例化对象
Person[] p = new Person[2];
p[0] = new Employee("张三",1000);
p[1] = new Student("李四","软件工程");
for(int i=0;i<2;i++)
{
String d = p[i].getDescription();
System.out.println(d);
}
}
}
实验截图: