首页 > 其他分享 >动手动脑

动手动脑

时间:2022-10-13 22:34:06浏览次数:51  
标签:调用 String 子类 动脑 动手 println 方法 public

 

1.运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!
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();
    }
}
将super放在首行的结果:



分析:通过super调用基类构造方法,必须是子类构造方法中的第一个语句。
      (1)调用父类的构造方法
       (2)操作被隐藏的成员变量和被覆盖的成员方法
        语法格式为:super.成员变量名    
                         super.成员方法名([参数列表])
2.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么?
构造函数是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。不能反过来调用也是这个原因,因为父类根本不知道子类有神魔变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错。
3.参看ExplorationJDKSource.java示例
此示例中定义了一个类A它没有任何成员:
class A { }
示例直接输出这个类所创建的对象
public static void main(String[] args)    

{
System.out.println(new A());
}
我们得到了一个奇特的运行结果,为什么? 

 
前面示例中,main方法实际上调用的是:
public void println(Object x),这一方法内部调用了String类的valueOf方法,valueOf方法内部又调用Object.toString方法:
public String toString() {
return getClass().getName() +"@" +
Integer.toHexString(hashCode());
}
hashCode方法是本地方法,由JVM设计者实现:
public  native int hashCode();
4.我们来看一段代码(示例Fruit.java ):
public class Fruit{        
   public String toString()
    {
        return "Fruit toString.";
    }
    public static void main(String args[]){
        Fruit f=new Fruit();
        System.out.println("f="+f);
    //  System.out.println("f="+f.toString());
}
}
注意最后一句,一个字串和一个对象“相加”,得到以下结果,为什么?
 
分析:Fruit类覆盖了Object类的toString方法。在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。
5.请自行编写代码测试以下特性(动手动脑):
在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
(1)覆盖方法的允许访问范围不能小于原方法。
(2)覆盖方法所抛出的异常不能比原方法更多。
(3)声明为final方法不许覆盖。
(4)不能覆盖静态方法。
package TestInherits;
public class Person {
String name;
    int age;
    double score;
    void introduce()
    {
     String name;
        int age;
        double score;
System.out.println("我的名字是:"+name+",我的年龄是:"+age+",我的成绩是:"+score);
}
}
package TestInherits;
public class Student extends Person {
void introduce()
    {
     System.out.println("我的名字是:"+name+",我的年龄是:"+age+",我的成绩是:"+score);     
    }
}
package TestInherits;
public class Fruit {
 public static void main(String[] args){
 String name;
    int age;
    double score;
        // 生成子类对象,调用子类的方法
        Student a=new Student();
        a.name="hsn";
        a.age=10;
        a.score=99.0;
        a.introduce();
        // 生成父类对象,调用父类的方法
        Person b=new Person();
        b.name="hhh";
        b.age=20;
        b.score=120;
        b.introduce();
    }
}
结果:

标签:调用,String,子类,动脑,动手,println,方法,public
From: https://www.cnblogs.com/LvJinshuai/p/16789978.html

相关文章

  • 动手动脑10.7
    1.动手实验1:运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用......
  • 动手动脑——继承和多态
    动手实验 classGrandparent{publicGrandparent(){System.out.println("GrandParentCreated.");}publicGrandparent(St......
  • 实战项目-用winform动手写一个计算器
    实战项目-用winform动手写一个计算器实战项目--用winform动手写一个“计算器”实战项目旨在交流学习,欢迎在评论区交流意见。简介:分享一个简单的软件项目---自己动手写一个......
  • 继承与多态中动手动脑
    -子类自动拥有父类声明为public和protected的成员,这就是继承特性的体现之一。-public:外界可自由访问-private:外界不可访问-protected:同一包中的子类都可以访问,另一包......
  • 动手动脑
    引用类型vs原始数据类型“引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。例:MyClassobj=newMyClass();诸如int,float之类的变量称为“原始......
  • 动手动脑:方法覆盖
    注:方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)测试:1.  在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。packagetest2;classGrandp......
  • 动手实验:继承条件下的构造方法调用
    packagetest2;classGrandparent{publicGrandparent() { System.out.println("GrandParentCreated."); }publicGrandparent(String......
  • 自己动手写ls命令——Java版
    自己动手写ls命令——Java版介绍在前面的文章Linux命令系列之ls——原来最简单的ls这么复杂当中,我们仔细的介绍了关于ls命令的使用和输出结果,在本篇文章当中我们用Java代......
  • 9.30动手动脑
    对于Java字段的初始化来说,共有以下几种方法:1.类的构造函数(构造方法):当创建一个对象时,其构造函数就会自动调用。构造方法必须与类名相同,无返回值。如果程序员没有定义一......
  • 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求,模拟 SE10 事物码
    我们知道ABAP系统里有一个有用的工具,事物码SE10,输入用户名称,可以查看该用户在本系统上创建的传输请求(TransportRequest)列表:点击Display按钮,能看到用户名WANGJER......