日期: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. Canvas画圆形

    转载:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#圆弧 function d ...

  2. Python之进程 3 - 进程池和multiprocess.Poll

    一.为什么要有进程池? 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗 ...

  3. ES5新增内容

    一.数组API实际开发中forEach和map会多一些=>是es6语法中的arrow function举例:(x) => x + 6相当于function(x){return x + 6; ...

  4. Factorized Hidden Variability Learning For Adaptation Of Short Duration Language Identification Models

    基于因子分解的隐层变量学习,应用于短语句语种识别模型的自适应     LFVs(Language Feature Vectors,语种特征向量)[11],与BSVs(Bottleneck Speake ...

  5. JavaScript实现框选效果

    <html> <head> <title>region</title> <style> body { margin: 0; padding: ...

  6. Java基础_0306:数组的定义与使用

    数组 数组指的就是一组相关变量的集合.例如:如果说现在要想定义100个整型变量,按照传统的思路,可能这样定义: int i1,i2 ,... i100,一共写100个变量. 以上的形式的确可以满足技术 ...

  7. Nginx系列2:用Nginx搭建一个可用的静态资源Web服务器

    上一节中编译好自己的nginx服务器后, 现在要对nginx.conf文件进行配置,搭建一个可用的静态资源Web服务器 1.放入可访问的html文件到nginx文件夹下,如图1所示: 这里我放入的是一 ...

  8. tmux 简单介绍

    不定期更新. 虽然一直很抵制使用linux,尤其是服务器那种无界面的东东,但是没办法还是得用.平时连接上服务器后每次要执行一个新的命令都得开一个新窗口重新连接服务器,不仅麻烦,而且有的时候服务器或者我 ...

  9. python 各种推导式玩法

    推导式套路 除了最简单的列表推导式和生成器表达式,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable = [out_exp_re ...

  10. 【leetcode】893. Groups of Special-Equivalent Strings

    Algorithm [leetcode]893. Groups of Special-Equivalent Strings https://leetcode.com/problems/groups-o ...