Java abstract
-
abstract 可以被哪些关键字修饰?
- private ×
- static ×
- final ×
- public √
-
抽象类是父类吗?
答:是的。抽象类需要子类覆盖其中所有的抽象方法之后才能对子类实例化。 -
简述抽象类与一般类的相同点。
答:都是用来描述事物,都在内部定义成员。 -
简述抽象类与一般类的不同点。
- 一般类有足够信息描述事物,抽象类描述的信息可能不足。
- 一般类不能定义抽象方法,只能定义非抽象方法。
抽象类既能定义抽象方法,又能定义非抽象方法。 - 一般类可以被实例化,抽象类不能被实例化。
抽象方法
- 抽象方法只有声明,没有实现,被abstract修饰。
- 抽象方法必须定义在抽象类中,类也被abstract修饰。
- 构造方法、类方法(static修饰)不能被声明为抽象方法。
抽象类
-
抽象类不可以被实例化。(调用抽象方法没有意义)
-
抽象类的子类可以被实例化。(子类为非抽象子类时,可实例化)
非抽象子类满足的充分条件: 完全覆盖父类中的抽象方法
public abstract class Animal {
abstract void eat();
abstract void breath();
}
public class Cat extends Animal {
@Override
void eat() {
System.out.println("I like fish.");
}
@Override
void breath() {}
void run() {
System.out.println("i can run.");
}
}
public abstract class Dog extends Animal {
void eat() {
System.out.println("I like bone.");
}
}
public class Hound extends Dog {
@Override
void breath() {
System.out.println("Hound like fresh air.");
}
}
public class Test {
public static void main(String args[]) {
(new Cat()).eat();
(new Hound()).eat();
(new Hound()).breath();
}
}
抽象类继承图表
抽象类建模实例分析
雇员示例:
需求:公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
对给出需求进行数据建模。
分析:
在这个问题领域中,先找出涉及的对象。
通过名词提炼法。
程序员:
属性:姓名,工号,薪水、
行为:工作。
经理:
属性:姓名,工号,薪水,奖金。
行为:工作。
程序员和经理不存在着直接继承关系,但是程序员和经理却具有共性内容。可以进行抽取。因为他们都是公司的雇员,可以将程序员和经理进行抽取.建立体系.
//描述雇员。
abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
//描述程序员。
class Programmer extends Employee
{
Programmer(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("code...");
}
}
//描述经理。
class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manage");
}
}
网友评论