/*
抽象类
抽象:模糊,不清晰,看不懂,
特点:
1.方法只有申明而没有实现时,该方法就是抽象方法,需要被abstract修饰
抽象方法必须定义在抽象类中,该类也必须被abstract修饰
2.抽象类不能够实例化,
3.抽象类必须有子类覆盖其抽象方法,否则该子类依旧为抽象类
*/
抽象类中有构造函数吗
有,用于给子类进行初始化
抽象类可以不定义抽象方法吗
可以,目的是为了不让这个类实例化,该类不能够创建对象
class Demo
{
void show1()
{}
void show2()
{}
}
抽象关键字不可以和那些关键字共存
private 不行,子类不知道private方法,不能够覆盖该方法
static 不行,静态方法不属于对象,直接类名可以调用其方法
final 不行,final神明的对象不能够被覆盖
抽象类和一般类的异同点
相同点:都是用来描述事物的
不同点:
一般类有足够的信息描述事物
抽象类的信息有可能不足
一般类中不可以定义抽象方法,只能够定义具体方法
抽象类可以定义抽象方法,也可以定义抽象方法
抽象类一定是一个父类吗
是的,因为需要子类覆盖其抽象方法后子类才能够实例化
class Demo
{
abstract void show()
{
abstractabstractabstract abstract abstract abstract abstract
abstract abstract abstract abstract abdtravt avdtravt absteact
abstract avstract ababsstract abstract abstract abstract abstract
}
}
class DemoA extends DemoA
{
void show()
{
System.out.println("demoa show");
}
}
class Demob extends Demo
{
void show()
{
System.out.println("demob show");
}
}
class 犬科
{
abstract void 吼叫
{
}
}
class Dog extends 犬科
{
void 吼叫
{
汪汪;
}
}
class Wolf
{
void 吼叫
{
嗷嗷;
}
}
/*雇员示例
分析:1,先找出涉及的对象;
通过名词提炼法
程序员:
属性:姓名,工号,薪水
行为:工作
经理
属性:姓名,工号,薪水,奖金
行为:工作
程序员和经理不存在直接继承关系,但是程序员与经理具有共性的内容
可以进行抽取,因为他们是公司的雇员
可以将程序员和经理进行抽取,建立体系
*/
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);
}
}
class AbstractTest
{
public static void main(String[] args)
{
}
}