第七章-复用类-继承语法-2初始化基类-不带参构造器
时间:2019-09-14
本文章向大家介绍第七章-复用类-继承语法-2初始化基类-不带参构造器,主要包括第七章-复用类-继承语法-2初始化基类-不带参构造器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
练习5:(1)创建带有两个默认构造器(空参数列表)的类A和类B。从A中继承产生一个名为C的新类,并在C内创建一个B类的成员。不要给C编写构造器。创建一个C类的对象并观察其结果。
一:我的答案
我的理解:A类 继承 C类,
1 package com.learnJava.test; 2 3 /** 4 * @Author zhuchangli 5 * @Date 2019/9/14 6 **/ 7 8 class ArtA{ 9 ArtA(){ 10 System.out.println("A constructor"); 11 } 12 } 13 14 class ArtB { 15 ArtB(){ 16 System.out.println("B constructor"); 17 } 18 } 19 20 public class CartoonC extends ArtA{ 21 public static void main(String [] args){ 22 ArtB b = new ArtB(); 23 } 24 25 }
二:参考答案
1 package com.learnJava.test; 2 3 /** 4 * @Author zhuchangli 5 * @Date 2019/9/14 6 **/ 7 8 class ArtA{ 9 ArtA(){ 10 System.out.println("A constructor"); 11 } 12 } 13 14 class ArtB extends ArtA{ 15 ArtB(){ 16 System.out.println("B constructor"); 17 } 18 } 19 20 public class CartoonC extends ArtA{ 21 public static void main(String [] args){ 22 ArtB b = new ArtB(); 23 } 24 25 }
我的答案里面没有 B继承A,答案更能说明继承关系
三:
练习4:证明基类构造器:(a)总是会被调用;(b)在导出类构造器之前被调用。
参考答案,太菜没有给出自己的答案。
1 package com.learnJava.test; 2 3 /** 4 * @Author zhuchangli 5 * @Date 2019/9/14 6 **/ 7 8 class A { 9 A(){ 10 System.out.println("A() "); 11 } 12 } 13 class B extends A{ 14 B(){ 15 System.out.println("B() "); 16 } 17 } 18 19 class C extends B{ 20 C(){ 21 System.out.println("C()"); 22 } 23 } 24 25 class D extends C{ 26 D(){ 27 System.out.println("D()"); 28 } 29 public static D makeD(){ 30 return new D(); 31 } 32 33 public static void main(String [] args){ 34 D d = new D(); 35 D d2 = makeD(); 36 } 37 } 38 39 public class E extends D{ 40 E(){ 41 System.out.println("E()"); 42 } 43 public static void main(String [] args){ 44 E e = new E(); 45 D.main(args); 46 } 47 }
留有疑问:
我觉得运行结果是:A() B() C()D()E() A()B()C()D()
但实际编译器运行结果为:
A()
B()
C()
D()
A()
B()
C()
D()
加在E类上的断点 未走到,直接从D类开始,有点儿奇怪。
练习3:
先看下面这段代码
1 package com.learnJava.test; 2 3 /** 4 * @Author zhuchangli 5 * @Date 2019/9/14 6 **/ 7 8 class Art{ 9 Art(){ 10 System.out.println("Art constructor"); 11 } 12 } 13 14 class Drawing extends Art{ 15 Drawing(){ 16 System.out.println("Drawing constructor"); 17 } 18 } 19 public class Cartoon extends Drawing{ 20 public Cartoon(){ 21 System.out.println("Cartoon constructor"); 22 } 23 24 public static void main(String [] args){ 25 Cartoon x = new Cartoon(); 26 } 27 }
运行结果为:
Art constructor
Drawing constructor
Cartoon constructor
书上结论为:构造过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问它之前,就会完成初始化,即使你不为Cartoon() 创建构造器,编译器也会为你合成一个默认的构造器,该构造器将调用基类构造器。
练习3:证明前面这句话。
我的答案是:
1 package com.learnJava.test; 2 3 /** 4 * @Author zhuchangli 5 * @Date 2019/9/14 6 **/ 7 8 class Art{ 9 Art(){ 10 System.out.println("Art constructor"); 11 } 12 } 13 14 class Drawing extends Art{ 15 Drawing(){ 16 System.out.println("Drawing constructor"); 17 } 18 } 19 public class Cartoon extends Drawing{ 20 /* public Cartoon(){ 21 System.out.println("Cartoon constructor"); 22 }*/ 23 24 public static void main(String [] args){ 25 Cartoon x = new Cartoon(); 26 } 27 }
运行结果:
Art constructor
Drawing constructor
和参考答案差不多,这里就不贴参考答案了。
原文地址:https://www.cnblogs.com/changlili/p/11520049.html
- ubuntu中安装tomcat
- python文件操作
- Owasp测试4.0手册
- 推荐一款Web渗透测试数据库
- 【提莫】一个域名收集及枚举工具
- chmod: changing permissions of `/usr/local/bin/...
- a windows service with the name MYSQL already e...
- NameError: name 'admin' is not defined(彻底解决方案)
- Error: No module named blog
- ubuntu中的django安装配置与操作
- IOS开发之-搜索栏UISearchController详解
- java归并排序(最精简代码)
- java希尔排序(最精简代码)
- java插入排序(最精简代码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数值分析第一次实习题报告
- Leetcode 409. 最长回文串 (Hash)
- Vue 前后端交互基础
- Spring Boot 入门
- Nginx 负载均衡
- Leetcode 289. 生命游戏(元胞自动机模拟)
- Nginx 简介
- 详解 Vue 目录及配置文件之 package.json
- Codeforces Round #382 (Div. 2) D. Taxes (数论 哥猜 大胆尝试)
- Vue Router
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) B. Bear and Blocks (技巧dp 难想)
- Codeforces 727D-T-shirts Distribution (字符串 贪心)
- 详解 Vue 目录及配置文件之 build 目录
- Linux 常见文件管理命令及目录结构(1)
- Java parseInt( ) 方法