[英]Why to make a class abstract when you can extend and instantiate it?
我很困惑。 当我知道抽象基本上意味着 class 是隐藏的并且没有人可以实例化它时,我很兴奋。 凉爽的。 但是当我知道有人可以来扩展我的 class 并实例化它时,使用所有方法,当有人可以窃取你所有的品质,像你一样行事并在市场。
如果有人可以帮助我解释这一点,我将不胜感激。
如果您想防止其他人从您的 class 继承,请将其设为final
。 但是它不是其层次结构的最后一个,因此它不能再被继承,因此不能被声明为abstract
的(因为它已经过时了)。 抽象类是模板。 它们继承了属性和功能,但没有具体实现它们,仅用于建立层次结构。 例子:
abstract class Vehicle {...}
class Car extends Vehicle {...}
class Bike extends Vehicle {...}
车辆描述了共同的属性,但具体的实例化太模糊了。 我们将所有类型的车辆称为“车辆”,即使我们从未在自然界中看到过其中一种。 这是一种思想结构,可以更轻松地对混凝土 forms 进行分类,例如汽车或自行车。
Abstract class 基本上意味着隐藏实现细节并仅向用户显示功能。
摘要 class 可以有以下方法。
抽象方法
Java 8 之后的非抽象方法他们也可以有
static 方法
最终方法
摘要 class A{
抽象无效运行(); //抽象方法
}
class B 扩展 A{
void run(){ System.out.println("安全运行"); }
}
上面你可以看到 run() 方法在 class A 中没有任何实现。
它不能被实例化,因为 class A 中没有 run() 的实现
所以为了使它工作,它需要扩展和实现(这就是在 class B 中所做的)。
在外部世界中,人们只能看到 run() 他们无法了解 run 的工作原理或 run() 方法的实际实现。
有关更多信息,请参阅此链接: java 中的抽象 class
抽象类没有隐藏。 抽象类是“不完整”的类,可以通过许多不同的方式“完成”。 如果您的类包含大量相似代码,最好将所有相似代码移入抽象 class 并让您的类扩展此抽象 class。
抽象类在其他方面功能非常齐全。 尽管您无法实例化它们,但它们甚至可以具有构造函数。 这些构造函数可以通过子 class 构造函数的super
关键字调用:
abstract class Parent {
private String name;
public Parent(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Child extends Parent {
private boolean hasMilkTeeth;
public Child(String name, boolean hasMilkTeeth) {
super(name); // calls the parent constructor!
this.hasMilkTeeth = hasMilkTeeth;
}
public boolean hasMilkTeeth() {
return hasMilkTeeth;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.