Java的动手动脑(五)
日期: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的动手动脑(五)的更多相关文章
- Java的动手动脑
动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...
- java异常处理动手动脑问题解决和课后总结
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
- Java之动手动脑(三)
日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...
- java的动手动脑10月20日
(1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...
- java课java方法动手动脑
动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) { ...
- java课堂动手动脑及课后实验总结
动手动脑一:枚举 输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...
- Java一些动手动脑实验
一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...
- java课堂动手动脑博客
随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...
- Java的动手动脑(七)
日期:2018.11.18 博客期:025 星期日 Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件 package temp; import jav ...
随机推荐
- ubuntu安装GBK编码
1 添加GBK编码 sudo vim /var/lib/locales/supported.d/local en_US.UTF-8 UTF-8 zh_CN.UTF-8 UTF-8 zh_CN.GBK ...
- 关于reduce的参数问题
ECMAScript 5还新增了两个缩小数组的方法: reduce() 和 reduceRight() .这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中, reduce() 方法从数组 ...
- ES6走一波 Generator异步应用
Generator 函数的异步应用 JS异步编程 callback Promise(解决回调地狱) 事件 发布订阅 generator Thunk函数 屁股函数 两次高阶调用的函数 第一次调用的入参 ...
- jq的遍历关系元素方法集合
children .children(selector) 返回被选元素的所有直接子元素,不返回文本节点: 下面例子:给level-2的子元素设置border.比较使用children和find htm ...
- sqlite3_column_type 与 SQLITE_NULL的区别
1. sqlite3_column_type(&stat, 1) == SQLITE_NULL 相同的情况下,只有当表为空时, 则是相同的, 如果 update table set a=&qu ...
- 快速搭建ELK日志分析系统
一.ELK搭建篇 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/ ...
- [Jenkins]CentOS7下Jenkins搭建
最近在倒腾Kubernetes的一些东西,这次需要用到Jenkins来实现自动化构建.来讲一讲搭建的整个过程. Jenkins是什么 Jenkins提供了软件开发的持续集成服务.它运行在Servlet ...
- python print输出带颜色 总结
书写格式: 开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m 注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个:另外由 ...
- Learning Discriminative Features with Class Encoder
近来论文看了许多,但没多少时间总结下来.今天暂时记录一篇比较旧的论文,选择理由是 Discriminative features. 做图像说白了就是希望有足够有判别性的特征,这样在分类或者匹配.检索的 ...
- Spring Boot默认Initializer(1)——ConfigurationWarningsApplicationContextInitializer
ConfigurationWarningsApplicationContextInitializer的作用是用来报告Spring容器的一些常见的错误配置的.这个类中定义了两个内部类: 1. 定义了一个 ...