日期: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. [C++]PAT乙级1006. 换个格式输出整数 (15/15)

    /* 1006. 换个格式输出整数 (15) 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数. 例如234应该 ...

  2. 初识生成器与生成器表达式 Day12

    一.生成器 1,生成器基本概念 生成器的实质是迭代器 迭代器:Iterator 内部同时包含了__iter__()和__next__()函数 可迭代对象:Iterable 内部包含__iter__() ...

  3. 函数语法:Js之on和addEventListener的使用与不同

    一.addEventListener语法 DOM标准:elem.addEventListener("事件名",函数对象,是否在捕获阶段触发) ---是否在捕获阶段触发= true/ ...

  4. 第27月第12天 webrtc ios openssl boost

    1. source 'https://github.com/CocoaPods/Specs.git' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pla ...

  5. proxysql 系列 ~ 高可用架构

    一 整体架构二 proxysql层    proxysql+keepalived对外提供vip    1  这里有一点要注意,虽然keepalived有脑裂危险,但是对于向proxysql这种无状态中 ...

  6. Javascript - Jquery - 动画

    动画(Dynamic) JQuery动画必须是在标准文档下使用 否则可能引起动画时抖动或其它不可预知的结果,标准文档格式:   <!DOCTYPE html PUBLIC "-//W3 ...

  7. 微信小程序获取手机验证码

    一种比较常见的功能获取手机验证码 先看效果图: 其实这个功能实现起来很简单,主要就是调取第三方接口,拿到返回值验证的问题 直接上代码吧: wxml页面: <view class='changeI ...

  8. HDOJ 3308 LCIS (线段树)

    题目: Problem Description Given n integers.You have two operations:U A B: replace the Ath number by B. ...

  9. 新版本微信导致的ios表单bug

    解决方法如下: $(document).delegate('input, textarea, select', 'blur', function(){ setTimeout(function(){ $ ...

  10. python用ftplib上传下载中文报错解决

    python中的中文编码一直以来都是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?在python中提到unicode,一般指的是unicode ...