1.方法
只有声明没有实现
时,就是抽象方法,用
abstract
修饰。格式:
abstract void 函数名();
抽象方法必须定义在抽象类中。抽象类不可以被实例化。(当一个类没有足够的信息描述事物,不具体,这个类就是抽象的,但这个类里可能有些信息不是抽象的,可能只是某些功能是抽象的。)
2.
抽象类必须有其子类覆盖所有抽象方法后,子类才能被实例化;
抽象类中有构造函数,用于给子类对象进行初始化;
抽象类可以不定义抽象方法,少见,目的就是不让该类创建对象,AWT的适配器对象就是这种类。通常这个类中有方法体,但是却没有内容。
抽象类关键字不可以和private、static、final关键字共存。
抽象类一定是个父类。
/*
雇员实例:
需求:
公司中4程序员,姓名,工号,薪水,工作内容
项目经理,以上还有奖金
对给出需求进行数据建模。
分析:
1.对象:
程序员:
属性:。。。
行为:工作
经理:
属性:。。。,奖金
行为:工作
两对象不存在直接继承关系,但有共性,可以进行抽取,建立体系。
*/
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 String getname()
{
return name;
}
public abstract void work();
}
class programer extends employee
{
programer(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("recode");
}
}
class manager extends employee
{
manager(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("manage");
}
}
class AbstractTest
{
public static void main(String[] args)
{
programer pro = new programer("hujiaojiao","100",5000);
manager man = new manager("hujiaojiao","10",8000);
pro.work();
man.work();
System.out.println(pro.getname()+","+man.getname());
}
}
3.
抽象类中
方法全是抽象
时,可以用另一种形式定义,用接口interface。
定义接口使用关键字不是class,是interface。
接口当中常见的成员,而且这些长远都有固定的修饰符(可以省略,但阅读性差)。接口中的成员都是公共的权限。
全局常量:public static final
抽象方法:public abstract
4.接口功能1-多实现
类与类间是继承关系,类与接口间是实现关系,格式:class 类名 implements 类名。
接口不可以实例化只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则,这个子类就是一个抽象类。
Java不直接支持多继承(方法体,导致调用不确定),多继承机制改良,变成多实现,一个类可以实现多个接口(
因为
无方法体)
。
5.功能2-一个类在继承另一个类的同时,还可以实现多个接口。避免单继承的局限性。
接口与接口间是继承关系,而且接口可以多继承。
6.抽象类的继承在定义该体系的基本共性内容。
接口的实现在定义体系的额外功能。.
7.接口类型的
引用用于
接收(指向)
接口的子类对象。