ABSTRACTCLASS(class和interface应该怎么样区分呢)

精英怪
广告

ABSTRACTCLASS,class和interface应该怎么样区分呢?

基本上在各种面向对象语言中,抽象类可以包含部分实现代码。接口是纯定义,不可以包含实现代码。这就是区别。

ABSTRACTCLASS(class和interface应该怎么样区分呢)

如果要打比方,接口是蓝图。抽象类是半成品,在定义规范的同时做到一定程度的代码复用。

抽象类和实例化的区别?

抽象类是不能实例化的。但可以通过继承实现其抽象方法,然后创建实例或者可以创建匿名类来使用。

如:

抽象类:Person有一抽象方法say();

public abstract class Person {

abstract void say();

}

继承:

class Jim extends Person{

@Override

void say() {

System.out.println("Hi my name is Jim!");

}

}

匿名类:

Person p = new Person() {

@Override

void say() {

System.out.println("Hello");

}

};

工厂方法的优缺点?

优点

1. 和构造方法不一样,静态工厂方法可以有自己明确的名字。比如newInstance、getInstance、valueOf,可以更明确知道这些方法名字的意思。而构造方法只能通过new类名来创建,比如Person person = new Person()。

2. 不必没次调用时都创建一个新对象。使用静态工厂方法对外提供单例,其实就是提前准备好实例,这样可以重复利用,减少重复创建实例,不过这也需要注意线程安全问题。

3. 可以返回原返回类型的任何子类的对象。这个可以这么理解,例如EnumSet类,EnumSet是抽象类是不能被实例化的,但是可以通过里面的noneOf静态工厂方法返回它子类的对象,RegularEnumSet和JumboEnumSet都是EnumSet的子类,代码如下:

public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>

implements Cloneable, java.io.Serializable {

EnumSet(Class<E>elementType, Enum[] universe) {}

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {

if (universe.length <= 64)

return new RegularEnumSet<>(elementType, universe);

else

return new JumboEnumSet<>(elementType, universe);

}

}

4.在创建参数化类型实例的时候,它们使代码变得更加简洁。这条可以这么理解,比如在创建一个Map类型对象时,我们一般可以这么创建:

Map<String, List<String>> m = new HashMap<String, List<String>>();

但是在JDK7以上的版本,泛型参数是可以被推导出来的,所以可以有更简洁的写法:

Map<String, List<String>> m = new Hash

abstract?

abstract class也就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

class是什么意思?

cannot create instance of abstract class 无法创建抽象类的实例 重点词汇 cannot不能; 未可; 不可 instance情况; 例子,实例; 要求,建议; 诉讼手续; 举…为例 abstract class抽象类

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,132人围观)

还没有评论,来说两句吧...