如何使用修饰符控制继承?
Posted
技术标签:
【中文标题】如何使用修饰符控制继承?【英文标题】:How do I control Inheritance with modifiers? 【发布时间】:2016-04-29 06:36:40 【问题描述】:我基本上是在寻找一种方法来修改以下源代码,在方法体中使用修饰符和一些额外的行,所以它在我的控制台中打印出以下内容:
1g
1hb
2f
1g
2hb
1hb
这是我大学课程的一项练习,我似乎无法理解它。我只允许更改 println 行以外的方法体以及更改方法的修饰符。我应该如何做到这一点以及修饰符在这里与继承有何关系?如何重载方法以获得所需的结果?
这是我的主要方法:
public class Poly
public static void main( String args[] )
Poly1 a = new Poly1();
a.g();
Poly2 b = new Poly2();
b.f();
这是我的第一堂课:
public class Poly1
public void f()
System.out.println( "1f" );
g();
private void g()
System.out.println( "1g" );
h( 10 );
protected void h( int i )
System.out.println( "1hi" );
void h( byte b )
System.out.println( "1hb" );
以下是我的第二堂课:
public class Poly2 extends Poly1
protected void f()
System.out.println( "2f" );
Poly1 c=new Poly1();
g();
h();
public void g()
System.out.println( "2g" );
h( 18 );
public void h( int i)
System.out.println( "2hi" );
public void h( byte b )
System.out.println( "2hb" );
【问题讨论】:
【参考方案1】:public class Poly1
public void f()
System.out.println("1f");
g();
public void g()
System.out.println("1g");
h((byte) 10); // cast to byte to invoke the overloaded method void
// h(byte b)
protected void h(int i)
System.out.println("1hi");
void h(byte b)
System.out.println("1hb");
public class Poly2 extends Poly1
public void f() //change from protected to public since the visibility of an overidden method Cannot be reduced
System.out.println("2f");
Poly1 c = new Poly1();
c.g(); // invoke the methode g of Poly1
h((byte) 10);
public void g()
System.out.println("2g");
h(18);
protected void h(int i)
System.out.println("2hi");
public void h(byte b)
System.out.println("2hb");
【讨论】:
是的,这基本上也是我的解决方案。我只是无法让第 5 行的 2hb 工作。它必须以某种方式介于两者之间,但我只是不知道如何? super.g(); super.h((byte) 10); 非常感谢!我终于明白了超级......干杯!以上是关于如何使用修饰符控制继承?的主要内容,如果未能解决你的问题,请参考以下文章