黑马程序员——面向对象(3)

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

15、接口和抽象类的比较

 

相同点:

都位于继承的顶端,用于被其他实现或继承;

都不能实例化;

都包含抽象方法,其子类都必须覆写这些抽象方法;

 

区别:

抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法;

一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

 

二者的选用:

优先选用接口,尽量少用抽象类;

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

 

 

我的总结:

接口不能有构造函数,抽象类是可以有构造函数的,

abstract可以定义构造函数(包括带函数的构造函数),因为要保证其子类在创建的时候能够进行正确的初始化,但是Abstract类不能被实例化。

 

知识点:如果不可以或者没有创建对象,那么我们必须加上static修饰,不能用对象调用,就只好用类去调用。

 

 

 

 

16、匿名内部类

 

适合只使用一次的类

不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建匿名内部类的对象。

匿名内部类不能定义构造器,因为匿名内部类没有类名。

 

格式:

new 父类构造器([实参列表]) 或 接口()

{

//匿名内部类的类体部分

}

 

 

17、枚举类

 

使用enum声明,默认直接继承了java.lang.Enum类,而不是Object类;

枚举类的对象是固定的,实例个数有限,不可以再new( ),枚举对象后可以跟()

枚举元素必须位于枚举类体中的最开始部分,枚举元素后要有分号与其他成员分隔。

枚举类的构造方法的权限修饰符默认是private

一旦枚举对象后面加上{},那么该对象实际是枚举匿名内部类对象;

所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象;

所有枚举类都提供一个静态的valueOf(String name)方法返回枚举类中对象名等于 name的对象。

 

Egpublic enum Color{

RED(), GREEN(){}, BLUE{};

}

 

 

package reviewDemo;

//枚举

 

enum Color{

Green,Blue,Yellow;

@Override

public String toString() {

String ret = super.toString();

switch (this) {

case Green:

ret = "绿色";

break;

case Blue:

ret = "蓝色";

break;

case Yellow:

ret = "黄色";

break;

 

default:

break;

}

return ret;

}

}

 

class Personp{

Color c = Color.Blue;

void show(){

System.out.println(c);

}

}

 

public class Demo18 {

public static void main(String[] args) {

Color []color = Color.values();

for (Color c : color) {

System.out.println(c);

}

new Personp().show();

}

}

输出:

绿色

蓝色

黄色

蓝色

 

 

枚举类覆写接口抽象方法的两种方式:

在枚举类中实现接口的抽象方法;

在枚举匿名内部类中实现接口的抽象方法;

 

interface I{

    void show();

}

 

enum Color implements I{

    RED(){

public void show(){

        }

    }, GREEN{

public void show(){

        }

    }, BLUE{

public void show(){

        }

    };

}

 

enum Color implements I{

    RED(), GREEN, BLUE;

    public void show() {

    }

}

 

 

 

 

我的总结:

枚举不可以new();即便是反射也不可以!

 

 

 

 

备注:一个类如果没有构造方法,那么一定有相对应的某个方法可以获取对象!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值