首页 > 编程语言 >Java第四讲动手动脑

Java第四讲动手动脑

时间:2022-10-18 19:36:30浏览次数:53  
标签:Java parent 子类 动脑 printValue 动手 父类 方法 public

1.

 

 在以上的代码中,main方法调用的是public void println(Object x),这一方法调用了String类的valueOf方法,valueOf方法内部调用Object. toString方法:

1 public String toString(){
2 return getClass().getname()+"@"+Integer.toHexString(hashCode());
3 }

hashCode方法是本地方法,作用是返回该对象的哈希码值,由JVM作者实现:

public native int hashCode();

2.

 

 

在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

3.

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);
    }
}

上述代码的特点是:子类和父类定义了一模一样的字段和方法,运行后得出结论:当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

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();
        
    }
}

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

4.Java编译器是如何为多态代码生成字节码指令,在程序运行过程中,多态特性又是如何实现的:除了static,final,private和构造器是静态绑定的,如果要调用的方法依赖于隐式参数的实际类型,那么必须使用动态绑定。虚拟机会为每个类的方法建立一个方法表(method table),当真正调用这个方法时,会在这个方法表中寻找匹配的相关方法,先查当前的类的方法中有没有匹配的,然后在查当前类的父类的方法表,找到后虚拟机调用这个方法。使用多态最大的好处是: 当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小。

 

标签:Java,parent,子类,动脑,printValue,动手,父类,方法,public
From: https://www.cnblogs.com/sgle0722/p/16803763.html

相关文章

  • 解决 java.lang.IllegalStateException: Received message from unsupported version:
    问题:在SpringBoot下用SpringDataElasticsearch进行java对Elasticsearch进行单元测试控制台报错:NoNodeAvailableException[Noneoftheconfigurednodesareava......
  • Java有什么优点,要如何学习Java
    Java的优点​  Java简单,易于设计,易于编写,因此比其他任何Java都易于编译,调试和学习。Java是面向对象的,用于构建模块化程序和其他应用程序中的可重用代码。Java与平台无关......
  • java 生成Long 类型 唯一ID
    转:java生成Long类型唯一ID基于java雪花算法生成long类型无序ID实现......
  • docker部署的jenkins配置多jdk版本环境时,报错/var/jenkins_home/jdk-17.0.4/bin/java:
    背景:jenkins默认jdk版本1.8,某个项目需要使用jdk17,但jenkins从官网在线安装的jdk最高版本只有jdk1.9,手动安装jdk17完成后,在jenkins容器内执行手动安装的jdk17时,报错/var/jen......
  • Java 注解【转载】
    Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制。Java语言中的类、方法、变量、参数和包等都可以被标注。和Javadoc不同,Java标注可以通过反射获取标......
  • java--String类
     java--String类入门详细介绍,转载java实现一个String类,转载 ......
  • final 在 java 中有什么作用?
    final修饰的常量在编译阶段会被放入常量池中。修饰类:表示该类不能被继承;修饰方法:表示方法不能被重写;修饰变量:final修饰基本数据类型变量和引用数据类型变量。  ①......
  • javascript 省略号
     解构赋值解构赋值可以从等号右侧的值中提取一个或多个保存到左边的变量中:let[a,b]=[1,2]//leta=1,b=2 通常情况左侧多余的变量会被设置为undefined,右侧多......
  • 断点JavaScript-断点续传-大文件断点上传
    ​最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交......
  • java继承
    1.继承的实际是子类继承了父类的方法和属性,我们可以使用super关键字调用父类的方法,或者this关键字调用自己的方法2.在继承的基础上我们可以拥有父类的已好的方法,同时也可......