课后作业06多态与接口

继承和多态

动手实验1

1.      实验要求:

 


2.      实验代码

class Grandparent

{

 

 

    public Grandparent()

      {

 

              System.out.println("GrandParent Created.");

      

}

 

 

    public Grandparent(String string)

       {

 

              System.out.println("GrandParent Created.String:" + string);

      

 }

 

}

 

 

 

class Parent extends Grandparent

{

 

 

    public Parent()

        {

 

              //super("Hello.Grandparent.");

 

              System.out.println("Parent Created");

      

       // super("Hello.Grandparent.");

 

         }

 

}

 

 

 

class Child extends Parent

{

 

 

    public Child()

        {

      

        System.out.println("Child Created");

 

         }

 

}

 

 

 

public class TestInherits

{

 

 

    public static void main(String args[])

        {

 

              Child c = new Child();

      

  }

 

}

3.      实验结果及分析

如果采用命令行的编译方法,目录下会多出这么几个文件:

 

也就是说父类会被单独放在一个
.class文件里。

运行结果是:

 

显式调用GrandParent的另一个构造函数后父类构造函数就是在第一句输出的。

当把通过 super 调用基类构造方法的语句放在后面时会报错

 


动手实验2

1.      问题

 


2.      代码

public class ParentChildTest {

       public static void main(String[] args) {

              Parent parent=new Parent();

              parent.printValue();

              Child child=new Child();

              child.printValue();

             

              parent=child;

              parent.printValue();

             

              parent.myValue++;

              parent.printValue();

             

              ((Child)parent).myValue++;

              parent.printValue();

             

       }

}

 

class Parent{

       public int myValue=100;

       public void printValue() {

              System.out.println("Parent.printValue(),myValue="+myValue);

       }

}

class Child extends Parent{

       public int myValue=200;

       public void printValue() {

              System.out.println("Child.printValue(),myValue="+myValue);

       }

}

3.      问题回答

我推测的运行结果是:

Parent.printValue(),myValue=100

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=201

因为我觉得当父类的变量引用一个子类的对象的时候,它不能控制这个子类对象的属性变量的改变。

Java语言可能非本对象的引用不能修改这个对象的变量值。

4.     
运行结果分析及总结

 

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定。

如果子类被当作父类使用,则通过子类访问的字段是父类的!

也就是说子类被当作父类使用时,方法是子类的,属性变量是父类自己的。

 

转载于:https://www.cnblogs.com/w-honey/p/7813324.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 接口Java中一种特殊的类,它只包含方法的声明而没有方法的实现。接口可以被类实现,实现接口的类必须实现接口中声明的所有方法。接口可以被用来实现多态,一个类可以实现多个接口,从而具有多种行为。接口还可以被用来定义常量和静态方法。在Java中,接口是一种非常重要的概念,它可以帮助我们实现代码的复用和扩展。 ### 回答2: Java继承和多态Java程序设计中非常重要的概念,对于Java程序员来说,理解接口的概念也是非常关键的。接口是一种抽象类型,它提供了一种规范和约束代码结构的方式,可以促进代码复用和拓展。 接口Java中的一种特殊类,它定义了一组抽象方法和常量。接口中的方法没有方法体,只有方法声明,这些方法需要被子类实现。接口中的常量是public static final 的常量,表示常量的值不会改变。 Java接口的最大优势在于它的多继承机制,子类可以实现多个接口,并从每个接口中继承相应的方法和常量。这种多继承机制可以促进代码的重用和扩展,同时提高代码的可读性和可维护性。 在Java中,接口还可以被用于反射、动态代理和lambda表达式等高级编程技术中。反射机制使得程序可以在运行时动态地获取和调用接口中的方法,可以提高程序的灵活性。动态代理机制是利用接口动态生成代理类,可以方便地对底层代码进行扩展和调试。lambda表达式是Java8引入的一种新的语法结构,充分利用了接口的多继承机制,大大简化了代码的编写。 总的来说,接口Java中的重要概念,掌握接口的知识可以使程序员更好地理解Java语言的特性和机制,同时也可以提高代码的可读性、可维护性和灵活性,为程序的开发和维护提供更多的方便。 ### 回答3: Java是目前世界主流的编程语言,广泛应用于移动应用开发、Web应用开发、游戏开发以及企业级应用开发等领域。而Java的继承和多态机制是其核心特性之一,是实现面向对象编程的关键。在Java中,接口(interface)是一种特殊的类,它只定义方法的规范,而不实现方法的具体内容。本文将围绕Java继承和多态接口这个话题进行详细的介绍和解读。 Java继承和多态Java中,继承是指从已有类派生出新的类。通过继承,子类可以继承父类的属性和方法,同时也可以在子类中添加新的属性和方法,或者重写父类的方法。这种特性使得程序可以更加灵活和高效。 而Java多态则是指同一个方法名可以被多个不同的子类对象调用,从而实现不同的功能。多态性是面向对象编程中的核心概念之一,是实现了代码重用、封装和维护的重要手段。 Java接口Java中,接口是一种特殊的类。它不允许定义成员变量,而只能定义方法的声明。换句话说,接口只是一系列方法的规范,而没有任何实现。因此,接口的作用主要在于规范类的行为和定义类之间的协议。接口中定义的方法必须被实现类实现,否则编译器会报错。 Java接口的优点 Java接口提供了多重继承的机制。在接口中可以定义多个方法,而实现类可以继承多个接口,从而获得不同的行为和方法。 Java接口定义了一种规范,而不是实现,因此,实现类可以自由实现接口,并按照自己的需求进行扩展。 Java接口继承了面向对象编程中的“多态”机制,同样也利于程序的灵活性和复用性。 Java接口的缺点 Java接口只能定义方法,而不能定义成员变量,这一点与抽象类不同。因此,在设计程序时,需要考虑如何在接口中定义常量。 Java接口中的方法被实现类实现时,可以随意编写方法体。因此,程序员必须对实现类的开发进行监控,以避免出现意外行为。有时会导致程序的可读性和可维护性不佳。 结语 综上所述,Java继承和多态接口Java编程中至关重要的概念。凭借其灵活性、可维护性和可重用性等优点,Java接口对于开发高效、健壮、灵活的程序又有了更强的支持。因此,Java开发者必须熟悉掌握继承、多态接口这些重要的特性,才能更好地开发出高品质和高效率的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值