Java第四讲动手动脑
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第四讲动手动脑的更多相关文章
- JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...
- JAVA方法03之动手动脑问题解决
动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...
- Java类和对象动手动脑
动手动脑1 以下代码为何无法通过编译?哪儿出错了?
- Java文件与类动手动脑
动手动脑1: 使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. package classJava; import java.io.IOExcepti ...
- Java第一节课动手动脑
在第一节课的动手动脑中,主要解决四则运算问题. 首先第一个是出30道四则运算题目,在100以内.这个问题需要控制随机数生成的范围和结果的范围在100以内就可以. 第一次改进是3点:一为避免重复,二为定 ...
- Java课程作业之动手动脑(四)
1.继承条件下的构造方法调用 class Grandparent { public Grandparent() { System.out.println("GrandParent Creat ...
- Java(数组)动手动脑
1>数组作为方法参数 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 源代码: // PassArray.java // Pas ...
- Java(多态)动手动脑
1> 请看以下"变态"的类(参看示例ParentChildTest.java) 上述代码的特点是: 子类和父类定义了一模一样的字段和方法 运行以下测试代码 1. 上边的程序运 ...
- java课堂作业3 动手动脑
第一题 测试一下代码查看输出结果 public class InitializeBlockDemo { /** * @param args */ public static void main(Str ...
- Java(异常处理)动手动脑
1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...
随机推荐
- v-if v-for同时使用 解决eslint报错问题
<template v-for="sec in item.goods"> <div v-if="item.showDetail" class= ...
- Kubernetes(k8s)存储管理之数据卷volumes(五):动态制备-存储类StorageClass
目录 一.系统环境 二.前言 三.静态制备和动态制备 四.存储类StorageClass 4.1 存储类StorageClass概览 4.2 StorageClass 资源 五.创建存储类Storag ...
- jQuery类库
jQuery介绍 1. jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行A ...
- 搭建漏洞环境及实战——在Windows系统中安装WAMP
安装成功之后,打开显示 链接:https://pan.baidu.com/s/1NpU7fUYOO_CSM8dNXKdnCw 提取码:mxvw
- java的基本数据类型自动转换
本文主要内容阐明java的自动数据类型转换 首先明确,数据总是由精度低到精度高方向转换 public class AutoConvert { public static void main(Strin ...
- [python] python-pinyin库
python-pinyin库是一个汉字拼音转换工具,其主要功能有: 根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音风格. 安装命令为:pip instal ...
- 1_使用swiper数组对象循环图片遇到的问题
今天在练习微信小程序的swiper组件时,想用列表循环出图片,发现图片一直没出来,控制台也没有报错,后来仔细一看,原来是语法格式写错了. 以下是我列表循环踩过的坑: 一:微信小程序的列表循环和vue的 ...
- Java连接Zookeeper以及书写简单增删改查的方法
Java连接Zookeeper以及书写简单增删改查的方法 摘要:本笔记主要记录了使用IDEA创建一个Maven项目并使用Maven配置文件下载Zookeeper连接驱动,连接云服务器的Zookee ...
- BC2-小飞机
题目描述 KiKi 学会了 printf 在屏幕输出信息,他想输出一架小飞机.请帮他编写程序输出这架小飞机. 输入描述 无 输出描述 解题思路 方案一: 将小飞机的图形按照行进行划分,总共可以分成 6 ...
- day04-Spring管理Bean-IOC-02
Spring管理Bean-IOC-02 2.基于XML配置bean 2.7通过util空间名称创建list BookStore.java: package com.li.bean; import ja ...