Javainheritance示例

以下是inheritance的示例

class Parent { Parent(int a, int b) { int c = a + b; System.out.println("Sum=" + c); } void display() { System.out.println("Return Statement"); } } class Child extends Parent { Child(int a, int b) { int c = a - b; System.out.println("Difference=" + c); } } public class InheritanceExample { public static void main(String args[]) { Child c = new Child(2, 1); c.display(); } } 

当我没有非参数化构造函数parent()时,我得到以下错误

 Exception in thread "main" java.lang.Error: Unresolved compilation problem: Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor at Child.(InheritanceExample.java:14) at InheritanceExample.main(InheritanceExample.java:22) 

能否请您解释一下在基类中没有参数构造函数的用途是什么。

 class child extends parent { child(int a,int b) { int c=ab; System.out.println("Difference="+c); } } 

子类构造函数必须做的第一件事就是调用父类构造函数。 如果你没有明确地这样做(例如super(a,b) ),则暗示默认构造函数的调用( super() )。

为此,您必须具有此默认构造函数(不带任何参数)。

如果您没有声明任何构造函数,那么您将获得默认构造函数。 如果声明至少一个构造函数,则不会自动获取默认构造函数,但可以再次添加它。

您收到的错误消息是抱怨对super()的隐含调用不起作用,因为父类中没有这样的构造函数。

有两种方法可以解决它:

  1. 添加默认构造函数
  2. 在子构造函数的第一行中,调用非默认的父构造函数( super(a,b)

另外,请不要使用全小写的类名。

它要求parent()的原因是因为child扩展了parent,但是你没有在子构造函数中显式调用super(a,b)。 由于没有对父构造函数的显式调用,javac尝试调用默认构造函数parent()并在无法找到它时进行抱怨。

您可以使用以下代码查看:

 class parent { public parent() { System.out.println("Parent Constructor"); } public parent(int a,int b) { int c=a+b; System.out.println("Sum="+c); } public void display() { System.out.println("Return Statement"); } } class child extends parent { public child(int a,int b) { int c=ab; System.out.println("Difference="+c); } } public class InheritanceExample { public static void main(String args[]) { child c=new child(2,1); c.display(); } } 

输出:

 Parent Constructor Difference=1 Return Statement 

此外,这没有默认构造函数可以正常工作:

 class parent { public parent(int a,int b) { int c=a+b; System.out.println("Sum="+c); } public void display() { System.out.println("Return Statement"); } } class child extends parent { public child(int a,int b) { super(a,b); int c=ab; System.out.println("Difference="+c); } } public class InheritanceExample { public static void main(String args[]) { child c=new child(2,1); c.display(); } } 

输出:

 Sum=3 Difference=1 Return Statement 

我认为有一个类似的问题:

为什么派生类构造函数总是访问基类构造函数?

你可以这样想:由于“child”inheritance自“parent”,“child”也必须是“parent”(多态)的有效实例才能表现为“parent”本身。 因此,“child”必须做的第一件事就是将自身构造为有效的“父” – 因此通过super()调用“parent”的构造函数必须是构造函数中的第一个方法调用。 如果不存在此类调用,则会对“父”的无参数构造函数进行隐式调用。

错误是因为如果我们不显式调用super,那么JVM将super()放在子类的构造函数中,这个super()搜索父类中的构造函数而不使用不在类中的参数,因此它是错误。 要么将非参数化构造函数放在父类中,要么将语句super(a,b)放在子构造函数的第一行中。

  class Parent { Parent(int a, int b) { int c = a + b; System.out.println("Sum=" + c); } void display() { System.out.println("Return Statement"); } } class Child extends Parent { Child(int a, int b) { super(a,b); int c = a - b; System.out.println("Difference=" + c); } } class InheritanceExample { public static void main(String args[]) { Child c = new Child(2, 1); c.display(); } } 
 public class Mobile{ private String manufacturer; private String operating_system; public String model; private int cost; Mobile(String man, String o,String m, int c){ this.manufacturer=man; this.operating_system=o; this.model=m; this.cost=c; } public String getModel(){ return this.model; } } public class Android extends Mobile{ Android(String man, String o,String m, int c){ super(man,o,m,c); } public String getModel(){ return "This is Android mobile" +model; } 
 import java.io.*; public class XXX { public static void main()throws IOException { System.out.println("Enter your name."); String name = in.readLine(); System.out.println(name+" rules!! Thank You!!"); } }