抽象类/接口dy12

设计一个Person类,类中定义一个doWork的方法。设计若干子类,对于doWork()这个方法进行不同的实现,如学生,工人,警察,教师等。

 

java中设计类的方法时,如果方法没有实现(非空实现),则必须声明为抽象的,用关键字abstract修饰;

如果一个类中,只要有一个抽象方法,那么这个类必须声明为抽象类;

抽象类的概念:

一个类一旦声明为抽象类,则此类不能构造对象;为什么?

问题1:抽象类中是否可以有构造器?有!

问题2:能否构造对象?不能!

问题3:在抽象类中构造器的作用是什么?在构造具体子类对象时调用!

抽象方法决定抽象类!

如果一个类是抽象类,那么类中是否一定要有抽象方法?不一定!

可以有,也可以没有!

什么样的类是抽象类?abstract关键字修饰的类是抽象类。

 

具体父类型可以作为引用类型的声明;

抽象父类型也可以作为引用类型的声明;

 

问题4:如果设计一个抽象类,类中定义一些具体方法和一些抽象方法,那么什么样的方法可以被调用?

问题5:如何使用抽象类中的实例方法?

 

如果一个具体子类继承抽象类,那么就要实现抽象父类中的所有抽象方法;

 

在子类中重写父类方法时,访问级别要大于等于原有访问级别;

 

具体子类继承抽象父类,子类中嵌套父类,无论父类是抽象的还是具体的,都不是做为一个独立的结构体存在;

接口:interface

统一的标准

1、常量字段

2、抽象方法

接口设计:

interface MyInterfaceB {

int NUM = 10; // public static final

String NAME = "sunzone";

}

interface MyInterfaceC {

double PI = 3.14;

void ma(); // public abstract

int op(int x, int y);

}

interface Driver {

Connection getConnection();

//...

}

实现类与接口的关系也是“is-a”关系。

Is-a体现为两个关键字:extendsimplements

在定义方法时,具体类可以做形参,抽象类可以作形参,接口可以做形参;

但谁做实参?

无论谁做形参,实参一定是具体类对象

具体父类的具体子类;

抽象类的具体子类;

接口的具体实现类;

接口之间的关系:

两个接口之间没有关系;

有继承关系,而且支持多继承;子接口与一个或多个父接口的关系

interface ICa {

void m1();

void m2();

}

interface ICb {

int m2();

}

interface ICab :ICa, ICb {

}

class IcabImpl implements Icab{

public void m1(){

//…

}

void ICa.m2(){

//..

}

int ICb.m2(){

//…

}

}

IcabImpl ii = new IcabImpl();

ICa ca = ii;

ca.m2();

ICb cb = ii;

Console.WriteLine(cb.m2);

 

类与接口之间的关系:

类可以在继承一个父类的基础上,实现多个接口;

 

粗粒度接口(不要设计这样的)

精粒度接口(推荐)

精粒度接口可以精细到只有一个方法(类库中大量存在),这样的方法称为“功能性”方法,接口称为“功能性”接口。

 

接口与抽象类的异同?

相同之处:

1、 不能构造对象

2、 都可以定义抽象方法

3、 设计的目的是为了被继承或被实现

4、 与子类或实现类的关系都属于is-a,可以用抽象类或接口的引用来作类型声明,进而统一调用具体子类或具体实现类;

不同之处:

1、 类中可以有构造器,但接口中没有

2、 最重要的区别:无论继承链的长短,继承链上所有的类都是同一类事物;同一个接口中实现类,可以没有任何关系。

3、 类中可以有抽象方法,也可以有具体方法,但接口中的方法都是抽象方法;

4、 顶层抽象类是Object类的子类,它继承了父类的所有成员;而接口中则除了自定义的的成员外,没有额外数据;接口是“轻量级”的抽象类,或者说是100%的抽象类;

5、 类编程时,内聚性低,耦合度高;接口编程,内聚性高,耦合度低

 

面向抽象类的编程和面向接口的编程:

Io:处理文件流的章节,设计使用的就是“面向抽象类”的编程

集合:“面向接口”的编程

 

类关系:

is-a,has-a,use-a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值