我的疑问或论点是 -
可以通过扩展Concrete类并实现接口来替换Abstract类。
如何或什么?
Abstract类包含什么?实现某些默认行为的方法。不同的访问修饰符。可以扩展另一个抽象类。可以实例化。等等...
所有这些都可以使用Concrete类来实现。 当需要维护结构而没有实现时,我们可以使用接口。
我可以看到Abstract Class是一个混凝土类和组合的组合。接口
显示一些代码 -
public abstract class MobilePhone {
abstract public String getPhoneModel();
public String getIMEI(){
// Consider execute() is some function that returns us IMEI for now
return execute("*#06#");
}
}
public class SamsungPhone extends MobilePhone {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
public class iPhone extends MobilePhone {
public String getPhoneModel(){
String imei = displayIMEI();
return getiphoneModelFromDB(imei);
}
}
如果我们做这样的事情,也可以实现同样的目标 -
public class MobilePhone {
public String getIMEI(){
// Consider execute() is some function that returns us IMEI for now
return execute("*#06#");
}
}
public interface Imobile {
String getPhoneModel();
}
public class SamsungPhone extends MobilePhone implements Imobile {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
public class iPhone extends MobilePhone implements Imobile {
public String getPhoneModel(){
String imei = displayIMEI();
return getSamsungModelFromDB(imei);
}
}
抽象类的特殊用例或需要是什么?
引用 -
When to use an interface instead of an abstract class and vice versa?
When do I have to use interfaces instead of abstract classes?
How should I have explained the difference between an Interface and an Abstract class?
还有更多(但它们没那么有用)
PS:我不是指抽象类和接口之间的区别
答案 0 :(得分:3)
抽象类允许您修复行为,例如:
public abstract class Foo {
protected abstract int getValue();
public final void doTheFoo() {
int value = getValue();
... do something ...
}
通过使用这种方法,您可以保证 doTheFoo()的行为不能被Foo的子类更改。但是你仍然可以扩展Foo并允许那些子类对 doTheFoo()将要做的事情产生某种影响。
这是你可以用具体的类+接口做的事情。
另一个核心方面:请记住,此类概念也是沟通的意思。通过抽象关键字,您可以告诉您的"观众"你做不希望实例化该类。如果那对你有价值,那么现在不是真正的要点;因为这个概念对于Java的父亲来说非常重要,使其成为语言的一部分。