日期:2018.11.1

星期四

博客期:021

  Part1: 运行代码

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

TestInherits.java

  运行结果如下:

  运行结果说明:java的构造方法与C++的构造函数的构造顺序相同!它的构造也是从上到下的(由基类开始构造)!而且顺序不可变,这个问题我们一会儿会再提到!其实就是构造方法实际上就是给类的对象一个初始化的方法!如果我们先初始化子类的方法,子类的方法要调用父类的数据成员,这不就尴尬了吗?你让人家子类上哪儿去找啊?所以顺序就认为规定不变,即使你这个父类是个“空类”(实际上Java的类中是不存在空类的)。

  Part2: 运行代码

 package Test;
public class ExplorationJDKSource { /**
* @param args
*/
public static void main(String[] args) {
System.out.println(new A());
} } class A{}

ExplorationJDKSource.java

  运行结果如下:

  运行结果说明:其实之所以我们的类可以做到输出,是因为除Object类以外,我们的写每一个类,都是有它的父类的,默认继承Object类!所以Object类里的方法名称都得到了继承!而System.out实际上是Object的一个子类PrintStream,而这个子类内部定义了一个public static void println(String ...);的方法传进来的大类参数就会调用父类的toString方法,改成String类型并输出。而该方法如下:

  而其中的hashCode()是本地的方法,用于生成随机数!

  Part 2.5: 顺便说一下今天学到的判断类型的方法!

  Object hello = "Hello,酷狗!";

  (hello instanceof Math) 这一部分返回boolean类型的值;返回hello是否属于Math类型的值!

  Part 3: 运行代码

 public class ParentChildTest {
public static void main(String[] args) {
Parent parent=new Parent();
parent.printValue();//Parent.printValue(),myValue=100
Child child=new Child();
child.printValue();//Child.printValue(),myValue=200 parent=child;
parent.printValue();//Child.printValue(),myValue=200 parent.myValue++;
parent.printValue();//Child.printValue(),myValue=200 ((Child)parent).myValue++;
parent.printValue();//Child.printValue(),myValue=201 }
} 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);
}
}

ParentChildTest.java

  运行结果:

  运行结果说明:我们先肯定一点——就是说一定是只有子类或它自己可以直接初始化父类!强制类型转换也是如此!只能将子类强制专成父类,其他的转型要通过类的成员方法来完成!这里可能不太好懂,那我就仔细的逐句给大家分析一下!首先!类文件我们就跳过了!(-v-!)嗯,这两个类文件就是初始化,也没什么难处!而且前两个printValue()方法应该也没有什么疑问!就是调用自己方法嘛!我们可以清楚的知道子类覆盖了父类的方法,所以调用还是调用的自己的!parent=child;这句是把child初始化parent的!就是拿child的数据来初始化parent!自然parent.printValue(); 一句调用方法,也就是调用子类方法!再说一下就是当前类型是什么,调用的就是哪个数据!现在child已经赋值给parent了,再运行自然显示200,而parent.myValue++;一句加的是parent所在的value而不是child的,所以200不变;再然后是把parent转成了Child类型,之后再调用value就是子类的value了,这样++语句就会生效,进而得到了一个201的结果。

Java的动手动脑(五)的更多相关文章

  1. Java的动手动脑

    动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...

  2. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  3. Java之动手动脑(三)

    日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...

  4. java的动手动脑10月20日

    (1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...

  5. java课java方法动手动脑

    动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) {       ...

  6. java课堂动手动脑及课后实验总结

      动手动脑一:枚举   输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...

  7. Java一些动手动脑实验

    一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...

  8. java课堂动手动脑博客

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...

  9. Java的动手动脑(七)

    日期:2018.11.18 博客期:025 星期日 Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件 package temp; import jav ...

随机推荐

  1. 【Thymeleaf】Thymeleaf模板对没有结束符的HTML5标签解析出错的解决办法

    解决方案 spring: thymeleaf: mode: LEGACYHTML5 <dependency> <groupId>net.sourceforge.nekohtml ...

  2. AOP 横行切面编程和 纵向编程 介绍

    1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码3 aop底层使用动态代理实现(1)第一种情况,有接口情况,使用动态代理创建接口 ...

  3. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  4. 【VMware vSphere】vSphere Data Protection简介

    [前言] 还记得一月份左右的时候,万达这边的服务器突然宕机,导致所有的项目不得不停止不说,还损失掉了很多宝贵的数据.为了防止这种情况再次发生,所以近期研究了vSphere Data Protectio ...

  5. ARMV7-M数据手册---Part A :Application Level Architecture---A1 Introduction

    1.前言 本章主要介绍了ARMV7体系结构及其定义的属性,以及本手册定义的ARMV7M属性. 主要包括: ARMV7体系结构和属性 ARMV7M属性 ARMV7M扩展 2. ARMV7体系结构和属性 ...

  6. awk入门【转】

    awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. 一.基本用法 awk的基本用法就是下面的形式. # 格式 $ awk 动作 文件名 # 示 ...

  7. Windows PowerShell 入門(1)-基本操作編

    Microsoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.インストール.起動終了方法.コマンドレット.命名規則.エイリアス.操作方法の調べ方について ...

  8. html单选按钮用jQuery中prop()方法设置

    模拟单选按钮时用jQuery,prop方法来设置. 赋默认选中值:$("#" + id).find("input:radio[value='" + state ...

  9. 设计模式C++学习笔记之五(Factory Method工厂方法模式)

      工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的 ...

  10. 【转】JVM内存结构 VS Java内存模型 VS Java对象模型

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途. 其中有些区域随着虚拟机进程的启动而 ...