第七周动手动脑(2018.10.29-11.4)

动手动脑1:

运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

运行截图:

结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

动手动脑2:

请自行编写代码测试以下特性:

在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

package ceshi;

class Animal {

    public int age=10;

    public String name;

    public void eat(){

           System.out.println("吃东西");

    }

    public Animal(int age){

           this.age=age;

    System.out.println("执行了构造方法");

    }

}

class Dog extends Animal{

    public int age=20;

    public void eat(){

           System.out.println("狗能吃骨头");

           }

           public Dog(int age){

                  super(age);

                  System.out.println("Dog构造方法执行了");

           }

}
package ceshi;

public class Test {

    public static void main(String[] args){

           Animal a=new Animal(10);

           a.eat();

           Dog b=new Dog(20);

           b.eat();

    }
    }

  截图:

动手动脑3:

答:

1.

2.

(1)子类对象可以赋值给父类的对象。父类进行子类强制转换可以赋值给子类的对象。

(2)子类能覆盖父类,但是父类中的变量的值是不改变的,访问父类中的变量时可用super来访问,反之则一直被子类覆盖。父类被覆盖时,对父类中的变量进行操作时,父类中的变量改变,但输出时仍输出覆盖父类的子类的变量。

(3)(child)Parent.myValue++,这时改变的将是覆盖父类的子类。

3.

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

这个特性实际上就是面向对象“多态”特性的具体表现。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

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

原文地址:https://www.cnblogs.com/yeshenfeng/p/9926198.html

时间: 2024-11-03 17:10:15

第七周动手动脑(2018.10.29-11.4)的相关文章

第七周动手动脑

一:继承 package 继承; //inherit 继承 public class TestInherits { public static void main(String args[]) { Child c = new Child(); } } class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String stri

第八周动手动脑

动手动脑一: 请阅读并运行AboutException.java示例 AboutException.java 答: 结论: 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除 动手动脑二:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果:  CatchWho 答:运行结果: ArrayIndexOutOfBoundsException/内层try-ca

第五周动手动脑(2018.10.15-10.21)

问题一: 早期经常这样定义变量:int value=100: 前面的这样定义:myclass obj=new myclass(); 这两种方式定义的变量是一样的吗? 答:当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null.//myclass obj=new myclass(); 定义一个原始类型的变量时,会马上给其分配内存 //int value=100: 问题二: 对于原始数据类型的变量(比如int),可以直接使用"=="判断两变量值是否相等 对象变量也可以使用&

Java 第五周 动手动脑

一.以下代码为何无法通过编译?哪儿出错了? 原因分析:这是一个常见的构造错误,错误的自己构建了构造方法,导致系统无法正常的进行变量的构造,系统默认的构造方法无法正常运行 二. package demo; public class Test { public static void main(String[] args) { // TODO 自动生成的方法存根 Foo obj1=new Foo(); Foo obj2=new Foo(); System.out.println(obj1==obj2

软工概论第一周动手动脑

一.需要网站系统开发需要掌握的技术 1.java语言 面向对象思想 设计模块和框架思想 xml语言 网页脚本语言 数据库 应用服务器 集成开发环境 二.本次课堂测试的源程序代码 //登录页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3

JAVA第五周 动手动脑

public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public static void method()//静态方法 { System.out.println("实例变量x = " + new Example().x);//在静态方法中访问类的实例变量需首先进行类的实例化 System.out.println("静态变量y = " + y);//在静态方

第五周动手动脑

1.早期经常这样定义变量:int value=100: 前面的这样定义:myclass obj=new myclass(); 这两种方式定义的变量是一样的吗? 答:当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null.//myclass obj=new myclass(); 定义一个原始类型的变量时,会马上给其分配内存 //int value=100: 2.以下代码为何无法通过编译?哪儿出错了? public class Test { public static void ma

第8周动手动脑

1.多层的异常捕获-1 public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-

学习进度条 第七周

这周由于是团队作业而且是大作业形式,代码除了复习数据结构算法写的代码其他基本没有写,安卓的代码只是下下来源码自己在看,自己的任务一旦确定就开始着手完成安卓应用.   第七周 所花时间(H) 11 代码量(行) 220 博客量(篇) 2 了解到的知识点 安卓开发的一些技巧