Java基础九--抽象类

Java基础九--抽象类

一、抽象类介绍


/*
抽象类:
抽象:笼统,模糊,看不懂!不具体。

特点:
1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。
抽象方法必须定义在抽象类中。该类必须也被abstract修饰。
2,抽象类不可以被实例化。为什么?因为调用抽象方法没意义。
3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化。
否则,这个子类还是抽象类。


1,抽象类中有构造函数吗?
有,用于给子类对象进行初始化。



2,抽象类可以不定义抽象方法吗?
可以的。 但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类。
通常这个类中的方法有方法体,但是却没有内容。

abstract class Demo
{
void show1()
{}

void show2()
{}
}

3,抽象关键字不可以和那些关键字共存?
private 不行
static 不行 如果是静态的话不需要对象,而抽象类就是需要对象的
final 不行

4,抽象类和一般类的异同点。
相同点:
抽象类和一般类都是用来描述事物的,都在内部定了成员。
不同:
1,一般类有足够的信息描述事物。
抽象类描述事物的信息有可能不足。
2,一般类中不能定义抽象方法,只能定非抽象方法。
抽象类中可定义抽象方法,同时也可以定义非抽象方法。
3,一般类可以被实例化。
抽象类不可以被实例化。


5,抽象类一定是个父类吗?
是的。因为需要子类覆盖其方法后才可以对子类实例化。


*/

abstract class Demo
{
abstract /*抽象*/ void show();

}

/*

class DemoA extends Demo
{
void show()
{
System.out.println("demoa show");
}
}
class DemoB extends Demo
{
void show()
{
System.out.println("demob show");
}
}
*/
abstract class 犬科
{
abstract void 吼叫();
}

class 狗 extends 犬科
{

void 吼叫()
{
System.out.println("汪汪");
}
}
class 狼 extends 犬科
{
void 吼叫()
{
System.out.println("嗷嗷");
}
}

class AbstractDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}

二、抽象类实例

  1 /*
  2 雇员示例:
  3 需求:公司中程序员有姓名,工号,薪水,工作内容。
  4 项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
  5 对给出需求进行数据建模。
  6 
  7 
  8 
  9 分析:
 10 在这个问题领域中,先找出涉及的对象。
 11 通过名词提炼法。
 12 程序员:
 13     属性:姓名,工号,薪水、
 14     行为:工作。
 15 经理:
 16     属性:姓名,工号,薪水,奖金。
 17     行为:工作。
 18 
 19 
 20 程序员和经理不存在着直接继承关系,
 21 
 22 但是程序员和经理却具有共性内容。
 23 可以进行抽取。因为他们都是公司的雇员 
 24 
 25 可以将程序员和经理进行抽取.建立体系.
 26     
 27 */
 28 
 29 //描述雇员。
 30 
 31 abstract class Employee
 32 {
 33     private String name;
 34     private String id;
 35     private double pay;
 36     Employee(String name,String id,double pay)
 37     {
 38         this.name = name;
 39         this.id = id;
 40         this.pay = pay;
 41     }
 42 
 43     public abstract void work();
 44     
 45 }
 46 
 47 
 48 //描述程序员。
 49 class Programmer extends Employee
 50 {
 51     Programmer(String name,String id,double pay)
 52     {
 53         super(name,id,pay);
 54     }
 55     public void work()
 56     {
 57         System.out.println("code...");
 58     }
 59 }
 60 
 61 //描述经理。 
 62 class Manager extends Employee
 63 {
 64     private int bonus;
 65     Manager(String name,String id,double pay,int bonus)
 66     {
 67         super(name,id,pay);
 68         this.bonus = bonus;
 69     }
 70     public void work()
 71     {
 72         System.out.println("manage");
 73     }
 74 }
 75 
 76 
 77 
 78 
 79 
 80 
 81 class  AbstractTest
 82 {
 83     public static void main(String[] args) 
 84     {
 85         System.out.println("Hello World!");
 86     }
 87 }
 88 
 89 
 90 class Person
 91 {
 92     private String name;
 93     private int age;
 94 
 95     Person(String name,int age)
 96     {
 97         this.name = name;
 98         this.age = age;
 99     }
100     public String getName()
101     {
102         return name;
103     }
104     public void setName(String name)
105     {
106         this.name = name;
107     }
108 }
109 class Student extends Person
110 {
111     Student(String name,int age)
112     {
113         super(name,age);
114     }
115 
116 }
117 class Worker extends Person
118 {
119     Worker(String name,int age)
120     {
121         super(name,age);
122     }
123 
124 }
原文地址:https://www.cnblogs.com/Renyi-Fan/p/6922269.html