Java继承是一种面向对象的特性,它允许一个类从另一个类中继承属性和方法。它使得子类可以重用父类的代码,而不必重新实现相同的功能。Java中的所有类都是Object的子类,因此Object是Java中最高层次的基础。
要创建一个子类,需要使用extends关键字:
public class SubClass extends SuperClass { // code here }
在上面的代码中,SubClass是子类,SuperClass是它的超类。在这里,SubClass将从SuperClass中“复制”所有属性和方法。这意味着SubClass将拥有SuperClass中定义的所有成员变量和成员方法。
此外,子类也可以定义自己的成员变量和成员方法。如果子类声明了与超类相同名字的成员变量或者成员方法(即覆盖了超类中相同名字的成员变量或者成员方法),则会使用子类中声明的版本而不是超 类中声明的版本。
此外,子 类还可以通过super关键字来引用超 类中声明 的 成 员 变 量 或 成 员 方 法 。 这 意 味 着 子 类 可 以 访 问 超 级 的 成 员 (例如 : super.memberVariableName )并且可以调用超 级 的 成 员 方 法 (例如 : super.memberMethodName() ) 。
此外,Java还支持多重集成——即一个子 级 可 以 有 多 个 超 级 。 要 实 现 多重集成,必须使用implements关键字来声明该子 级 实 现 多 个 超 级 : p >
public class Subclass extends Superclass1 implements Superclass2, Superclass3 { // code here } pre > < p >在上面的代表中,Subclass将从Superclass1,Superclass2,Superclass3三个超集中“复制”所有属性和方法.因此,Subclass将拥有三个超集定义的所有成员变量和成员方法. p >Java 继承
Java面向对象设计 - Java继承
子类可以从超类继承。超类也称为基类或父类。子类也称为派生类或子类。
从另一个类继承一个类非常简单。我们在子类的类声明中使用关键字extends,后跟超类名称。
Java不支持多重继承的实现。
Java中的类不能有多个超类。
语法
一般的语法是
<class modifiers>class <SubclassName> extends <SuperclassName> { // Code for the Subclass }例子
以下代码显示如何使用从Employee类创建Manager类。
class Employee { private String name = "Unknown"; public void setName(String name) { this.name = name; } public String getName() { return name; } } class Manager extends Employee { } public class Main { public static void main(String[] args) { // Create an object of the Manager class Manager mgr = new Manager(); // Set the name of the manager mgr.setName("Tom"); // Get the name of the manager String mgrName = mgr.getName(); // Display the manager name System.out.println("Manager Name: " + mgrName); } }上面的代码生成以下结果。
注意
我们没有为Manager类编写任何代码,它的工作原理与Employee类相同,因为它继承自Employee类。
您可以使用Manager类的构造函数创建一个管理器对象。
Manager mgr = new Manager();创建管理器对象后,Manager对象的工作方式与Employee对象相同。
我们对manager对象使用了setName()和getName()方法。
mgr.setName("Tom"); String mgrName = mgr.getName();Manager类不声明setName()和getName()方法。Manager类“扩展Employee"。
当一个类从另一个类继承时,它继承它的超类成员,实例变量,方法等。
对象父类
对象类是默认超类。
所有类都隐式继承自Object类。因此所有类的对象都可以使用Object类的方法。
public class P { }类P从Object扩展,即使我们没有指定父类。
Object类声明了hashCode()和toString()方法。因为Employee类是Object类的一个子类,它可以使用这些方法。
Employee emp = new Employee(); int hc = emp.hashCode(); String str = emp.toString();Employee类不使用extends子句指定其超类。这意味着它继承自Object类。
Object类声明了hashCode()和toString()方法。因为Employee类是Object类的一个子类,它可以使用这些方法。
向上转换和向下转换
现实世界中的“is-a”关系在软件中转化为继承类层次结构。
例如,Manager是特定类型的Employee。 Employee是一种特定类型的Object。
当您在继承层次结构中向上移动时,将从特定类型移动到更一般的类型。
从子类到超类的赋值称为上转换,它在Java中始终允许。
class Employee { private String name = "Unknown"; public void setName(String name) { this.name = name; } public String getName() { return name; } } class Manager extends Employee { } public class Main { public static void printName(Employee emp) { String name = emp.getName(); System.out.println(name); } public static void main(String[] args) { Employee emp = new Employee(); emp.setName("Tom"); Manager mgr = new Manager(); mgr.setName("Jack"); // Inheritance of setName() at work // Print names printName(emp); printName(mgr); // Upcasting at work } }为子类变量分配超类引用称为向下转换。
向下转换与向上转换相反。
在向上转换中,赋值向上移动类层次结构,而在向下转换中,赋值向下移动类层次结构。
我们必须在向下转换中使用类型转换。
Manager mgr = (Manager)emp; // OK. Downcast at work上面的代码生成以下结果。
instanceof运算符
Java instanceof运算符帮助我们确定引用变量是否有对类或子类的引用。
它需要两个操作数,并计算为布尔值true或false。
它的语法是
<Class Reference Variable> instanceof <Class Name or Interface>如果<Class Reference Variable>引用类<Class Name>或其任何后代的对象,instanceof返回true。如果引用变量为null,instanceof总是返回false。
我们应该在向下转换之前使用instanceof运算符。
Manager mgr = new Manager(); Employee emp = mgr; if (emp instanceof Manager) { // downcast will succeed mgr = (Manager)emp; }else { // emp is not a Manager type }禁用继承
我们可以通过声明类final来禁用子类。
最终的类不能被子类化。
下面的代码声明了一个名为MyClass的最终类:
public final class MyClass{ }我们也可以声明一个方法为final。最终方法不能被子类覆盖或隐藏。
public class A { public final void m1() { } public void m2() { } }
Java面向对象设计 - Java抽象类和方法Java可以定义一个类,其对象不能被创建。它的目的只是表示一个想法,这是其他类的对象共有...
Java面向对象设计 -Java泛型方法和构造函数泛型方法我们可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定...
Java面向对象设计 -Java注释用法注释元素的提供值必须是编译时常量表达式,我们不能使用null作为注释中任何类型元素的值。原始类...
Java面向对象设计 - Java枚举类型什么是枚举类型?枚举类型创建常量的有序列表作为类型。它以特定顺序指定常量。在枚举类型中定...