public class A {
protected int x = 10;
A() {
System.out.println("Constructor A" ) ;
}
public void test() {
System.out.println(" A " );
}
public void Aex() {
System.out.println(" Aex " ) ;
}
public void testg() {
System.out.println("Hello");
}
}
public class B extends A {
B() {
System.out.println("Constructor B" ) ;
}
B(int num){
this.x = num ;
//System.out.println(this.x);
}
public void test() {
System.out.println(" B " );
}
public int getx() {
return this.x;
}
}
public class C {
public static void main( String [] args ) {
A a = new B();
//a.test();
a.Aex();
//a.testg();
B b = new B(5);
a = b;
a.test();
System.out.println( a.getx() ) ;
}
}
类B
从类继承,A
并且都具有称为的方法test()
。我可以创建对派生类对象的基类引用,因此可以创建引用A a = new B();
。当我调用时a.test()
,我了解test()
的B
会调用的方法,这有助于防止代码中的条件语句。但是,假设B
有另一个方法称为void getx()
,并且我想调用该方法,则不能使用基类引用来调用它,因为基类没有称为void的方法getx()
。那么在这种情况下多态性有什么用呢?调用的唯一方法getx
是创建派生类和call的引用getx()
。
而不是类A
和B
让我们使用类Animal
和Bird
一个例子。
假设您的Animal
班级有方法eat
和sleep
(所有动物都可以做的事情),而您的Bird班级也有一个fly
方法(只有鸟可以做)。如果您引用了某个Animal
对象,则无法fly
在此变量上调用该方法是没有意义的,因为您不知道它是哪种动物,它可能是aSlug
或an Wombat
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句