java编程思想第四版第十章习题
- 第一题
package net.mindview.innerclasses; public class Outer {
class Inner {
Inner(){
System.out.println("这是一个内部类");
}
} public Inner in(){
return new Inner();
} public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner inner = out.in();
}
} - 第二题
package net.mindview.innerclasses;
/**
* 选择器
*/
interface Selector3 {
//是否结束
boolean end();
//当前
Object current();
//下一个
void next();
} class OtherObject3 {
String obj;
OtherObject3(String obj){
this.obj = obj;
} @Override
public String toString() {
return obj;
}
} /**
* 次序
*/
public class Sequence3 {
private Object[] items;
private int next = ;
//定义数组的个数
public Sequence3(int size){
items = new Object[size];
}
//添加
public void add(Object x){
items[next ++] = x;
} //内部类--顺序选择器
private class SequenceSelector implements Selector {
//选择器最开始指向第一个元素
private int i = ;
@Override
public boolean end() {
return i == (items.length);
} @Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
} @Override
public void next() {
if(i<items.length){
i++;
}
}
} public Selector selector() {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence3 s = new Sequence3();
for(int i=; i<; i++){
s.add(new OtherObject("对象"+i));
}
Selector selector = s.selector();
while(!selector.end()){
System.out.println(selector.current());
selector.next();
}
} } - 第三题
package net.mindview.innerclasses;
/**
* 选择器
*/
interface Selector3 {
//是否结束
boolean end();
//当前
Object current();
//下一个
void next();
@Override
public String toString();
} class OtherObject3 {
String obj;
OtherObject3(String obj){
this.obj = obj;
} @Override
public String toString() {
return obj;
}
} /**
* 次序
*/
public class Sequence3 {
private Object[] items;
private int next = ;
private String str;
//定义数组的个数
public Sequence3(int size, String str){
items = new Object[size];
this.str = str;
}
//添加
public void add(Object x){
items[next ++] = x;
} //内部类--顺序选择器
private class SequenceSelector implements Selector3 {
//选择器最开始指向第一个元素
private int i = ;
@Override
public boolean end() {
return i == (items.length);
} @Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
} @Override
public void next() {
if(i<items.length){
i++;
}
} public String toString() {
return str;
}
} public Selector3 selector() {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence3 s = new Sequence3(, "三星");
for(int i=; i<; i++){
s.add(new OtherObject("对象"+i));
}
Selector3 selector = s.selector();
while(!selector.end()){
System.out.println(selector.current());
selector.next();
System.out.println(selector.toString());
}
} } - 第四题
package net.mindview.innerclasses;
/**
* 选择器
*/
interface Selector {
//是否结束
boolean end();
//当前
Object current();
//下一个
void next();
} class OtherObject {
String obj;
OtherObject(String obj){
this.obj = obj;
} @Override
public String toString() {
return obj;
}
} /**
* 次序
*/
public class Sequence {
private Object[] items;
private int next = ;
//定义数组的个数
public Sequence(int size){
items = new Object[size];
}
//添加
public void add(Object x){
items[next ++] = x;
} //内部类--顺序选择器
private class SequenceSelector implements Selector {
//选择器最开始指向第一个元素
private int i = ;
@Override
public boolean end() {
return i == (items.length);
}
/**
* 新增方法: 在内部类中引用外部类
*/
public Sequence outer(){
return Sequence.this;
} @Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
} @Override
public void next() {
if(i<items.length){
i++;
}
}
} public Selector selector() {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence s = new Sequence();
for(int i=; i<; i++){
s.add("对象"+i);
}
Selector selector = s.selector();
while(!selector.end()){
System.out.println(selector.current());
selector.next();
}
} } - 第五题
package net.mindview.innerclasses; class Outter{
class Inner{ }
} public class Test5 {
public void getInner(){
Outter outter = new Outter();
Outter.Inner in = outter.new Inner();
}
} - 第六题
package net.mindview.innerclasses.test6.one; public interface One {
public String one();
}package net.mindview.innerclasses.test6.two; import net.mindview.innerclasses.test6.one.One; public class Two {
protected class TwoInner implements One{
public TwoInner() {
System.out.println("这时two的内部类,继承自One");
} @Override
public String one() {
return "Two->one()";
} }
}package net.mindview.innerclasses.test6.three; import net.mindview.innerclasses.test6.one.One;
import net.mindview.innerclasses.test6.two.Two; public class Three extends Two{
private Two two;
public Three(Two two){
System.out.println("这时Three类");
this.two = two;
}
public One three(){ return two.new TwoInner();
}
public static void main(String[] args) {
Three three = new Three(new Two());
One one = three.three();
System.out.println(one.one());
} } - 第七题
package net.mindview.innerclasses.test7;
interface Update{
String update();
}
public class Show {
private String str; private String showStr(){
return str;
} private class InnerUpdate implements Update{
private int abc = ;
public String update(){
str = "内部类修改";
System.out.println(str);
return showStr();
}
} public void visitInner(){
InnerUpdate update = new InnerUpdate();
System.out.println(update.abc);
update.update();
} public static void main(String[] args) {
Show show = new Show();
show.visitInner();
}
} - (略)
- 第九题
package net.mindview.innerclasses.test9; interface Show{
String show();
} public class Test9 {
public String update(){
class Inner implements Show{
@Override
public String show() {
return "学习";
}
} Inner inner = new Inner();
return inner.show();
}
public static void main(String[] args) {
Test9 t = new Test9();
System.out.println(t.update());
}
} - 第十题
package net.mindview.innerclasses.test9; interface Show{
String show();
} public class Test9 {
public String update(boolean flag){
String str=null;
if(flag){
class Inner implements Show{
@Override
public String show() {
return "学习";
}
}
Inner inner = new Inner();
str = inner.show();
}
return str;
}
public static void main(String[] args) {
Test9 t = new Test9();
System.out.println(t.update(true));
}
} - 第十一题
package net.mindview.innerclasses.test10; interface InterfaceClass{
void i();
} public class Test10 {
private class Inner implements InterfaceClass{
@Override
public void i() {
}
} public InterfaceClass inner(){
return new Inner();
} public static void main(String[] args) {
Test10 test10 = new Test10();
InterfaceClass inner = test10.inner();
//这样不可以,所以被隐藏了
//Inner inner = test10.inner();
} } - 第十二题
package net.mindview.innerclasses.test12;
interface Update{
String update();
}
public class Show {
private String str; private String showStr(){
return str;
} private class InnerUpdate implements Update{
private int abc = ;
public String update(){
str = "内部类修改";
System.out.println(str);
return showStr();
}
} public Update visitInner(){
return new Update(){
private int abc = ;
@Override
public String update() {
str = "内部类修改";
System.out.println(str);
return showStr();
}
};
} public static void main(String[] args) {
Show show = new Show();
show.visitInner().update();
}
} - 第十三题
package net.mindview.innerclasses.test13; interface Show{
String show();
} public class Test13 {
public String update(boolean flag){
String str=null;
if(flag){
return new Show(){
@Override
public String show() {
return "学习";
} }.show();
}
return str;
}
public static void main(String[] args) {
Test13 t = new Test13();
System.out.println(t.update(true));
}
} - (略)
- 第十五题
package net.mindview.innerclasses.test15; class Person {
private String name;
public Person(String name){
this.name = name;
}
@Override
public String toString() {
return name;
}
}
public class Test15 {
public Person method(String name){
return new Person(name){
@Override
public String toString() {
return super.toString();
}
};
}
public static void main(String[] args) {
Test15 t = new Test15();
System.out.println(t.method("张三").toString());
} } - 第十六题
package net.mindview.innerclasses.test16;
interface Cycle {
void make();
} interface CycleFactory {
Cycle getCycle();
} class Unicycle implements Cycle{
private Unicycle(){} @Override
public void make() {
System.out.println("make Unicycle");
} public static CycleFactory factory = new CycleFactory(){
@Override
public Cycle getCycle() {
return new Unicycle();
}
};
} class Bicycle implements Cycle{
private Bicycle(){} @Override
public void make() {
System.out.println("make Bicycle");
} public static CycleFactory factory = new CycleFactory(){
@Override
public Cycle getCycle() {
return new Bicycle();
}
};
} class Tricycle implements Cycle{
private Tricycle(){} @Override
public void make() {
System.out.println("make Tricycle");
} public static CycleFactory factory = new CycleFactory(){
@Override
public Cycle getCycle() {
return new Tricycle();
}
};
} public class Cycles {
public static void serice(CycleFactory factory){
Cycle c = factory.getCycle();
c.make();
}
public static void main(String[] args) {
//我想要什么样的车,就找这种车的工厂去制作一辆车就可以了
serice(Unicycle.factory);
serice(Bicycle.factory);
serice(Tricycle.factory);
} } - 第十七题
package net.mindview.innerclasses.test17; import java.util.Random; /**
* 这时一个抛硬币和掷骰子等类型的框架
*/ interface ThrowProduct {}
interface ThrowFactory{
ThrowProduct getProduct();
}
class ThrowCorn implements ThrowProduct{
Random rand = new Random();
private ThrowCorn(){
if(rand.nextInt() % ==){
System.out.println("硬币的正面");
}else{
System.out.println("硬币的反面");
}
} public static ThrowFactory factory = new ThrowFactory(){
@Override
public ThrowProduct getProduct() {
return new ThrowCorn();
}
};
} class ThrowDice implements ThrowProduct{
Random rand = new Random();
private ThrowDice(){
System.out.println("掷的骰子数是"+(rand.nextInt()+));
} public static ThrowFactory factory = new ThrowFactory(){
@Override
public ThrowProduct getProduct() {
return new ThrowDice();
}
};
} public class ThrowFrame {
public static void service(ThrowFactory f){
ThrowProduct p = f.getProduct();
}
public static void main(String[] args) {
service(ThrowCorn.factory);
service(ThrowDice.factory); } } - 第十八题
package net.mindview.innerclasses.test18; public class Test18 {
public static class QianTao{ }
public static void main(String[] args) {
QianTao q = new QianTao();
}
} - 第十九题
package net.mindview.innerclasses.test19; public class Test19 {
//这时一个嵌套类
public static class Inner1{ //这时定义在嵌套类中的嵌套类
static class Inner2{
public static int i = ;
}
}
public static void main(String[] args) {
System.out.println(Inner1.Inner2.i);
}
}编译后的文件结构:

- 第二十题
package net.mindview.innerclasses.test20;
interface InnerInInterface{
static class Inner{
public Inner(){
System.out.println("嵌套类构造方法");
}
}
} public class Test20 {
public static void main(String[] args) {
//直接使用 new 外围类.嵌套类
InnerInInterface.Inner inner = new InnerInInterface.Inner();
}
} - 第二一题
package net.mindview.innerclasses.test21;
interface InterfaceClass {
void f();
void b();
class InnerClass{
static void get(InterfaceClass impl){
impl.f();
}
}
}
public class Test21 implements InterfaceClass{
public Test21(){
System.out.println("这是Test21构造函数的方法");
}
public static void main(String[] args) { Test21 t = new Test21();
new InterfaceClass.InnerClass().get(t);; } @Override
public void f() {
System.out.println("实现类 f()");
} @Override
public void b() {
System.out.println("实现类 b()");
} } - 第二十二题
package net.mindview.innerclasses.test22; //选择器
interface Selecotr {
//选择器是否到达尾部
boolean end();
//下一个元素编号
void next();
//当前元素
Object current(); } public class Sequence {
private Object[] items ;
static int counter = ;
public Sequence(int size){
items = new Object[size];
for(int i=; i<size; i++){
add("对象"+i);
}
} public void add(Object o){
items[counter++] = o;
} public Selecotr sequenceSelector = new Selecotr(){
int i = ;
@Override
public boolean end() {
// TODO Auto-generated method stub
return i == items.length;
}
@Override
public void next() {
if(i<items.length)
i++;
}
@Override
public Object current() {
if(i<items.length){
return items[i];
}
return null;
}
};
//反序
public Selecotr reverseSelector = new Selecotr(){
int i = ; @Override
public boolean end() {
return i<;
} @Override
public void next() {
i--;
} @Override
public Object current() {
if(i>=){
return items[i];
}
return null;
} }; public static void main(String[] args) {
Sequence s = new Sequence(); //正序
Selecotr se = s.sequenceSelector;
while(!se.end()){
System.out.println(se.current());
se.next();
}
System.out.println("-----------");
//反序
Selecotr re = s.reverseSelector;
while(!re.end()){
System.out.println(re.current());
re.next();
} } } - 第二十三题
package net.mindview.innerclasses.test23; public interface U {
void method1();
void method2();
void method3();
}package net.mindview.innerclasses.test23; public class A {
U methodA1(){
return new U(){
@Override
public void method1() {
System.out.println("A methodA1 method1()");
} @Override
public void method2() {
System.out.println("A methodA1 method2()");
} @Override
public void method3() {
System.out.println("A methodA1 method3()");
}
};
}
}package net.mindview.innerclasses.test23; public class B {
U[] us ;
private static int counter = ;
public B(int size){
us = new U[size];
}
void methodB1(U u){
us[counter++] = u;
}
void methodB2(int i){
us[i] = null;
}
void methodB3(){
for(int i=; i<us.length; i++){
U u = us[i];
u.method1();
u.method2();
u.method3();
}
} public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
A a3 = new A();
A a4 = new A();
A a5 = new A();
B b1 = new B();
b1.methodB1(a1.methodA1());
b1.methodB1(a2.methodA1());
b1.methodB1(a3.methodA1());
b1.methodB1(a4.methodA1());
b1.methodB1(a5.methodA1()); b1.methodB3();
System.out.println("----------------");
b1.methodB2();
b1.methodB3();
}
} - f
- f
- f
- f
java编程思想第四版第十章习题的更多相关文章
- java编程思想第四版第十章总结
1. 内部类的特性 他允许你把一些逻辑相关的类组织在一起. 2. 使用.this 如果你需要在内部类中堆外部类进行应用,可以使用外部类的名字后面加.this.下面展示了如何使用 .this packa ...
- java编程思想第四版第九章习题
第三题 package net.mindview.interfaces; abstract class Base{ public Base(){ print(); } abstract void pr ...
- java编程思想第四版第八章习题
第一题 package net.mindview.polymorphism; //基类-自行车 class Cycle{ } //子类-单轮车 class Unicycle extends Cycle ...
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- 《Java编程思想第四版》附录 B 对比 C++和 Java
<Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是 ...
- Java编程思想第四版勘误
坊间传说这本书翻译得很烂,我倒觉得还好.虽然看原文更准确,但是如果在具备一定编程思维和基础.能够看出来疑问的情况下,还是看中文更快一些,而且这本书本身也不适合初学者看.当然,错误和不通顺还是有的,而且 ...
- Java编程思想第四版完整中文高清版.pdf
Java编程思想第四版完整中文高清版.pdf 链接: https://pan.baidu.com/s/1vV5BHF3L-bnaG6WGurdJ_A 提取码: vigy 复制这段内容后打开百度网盘手机 ...
- 《Java编程思想第四版完整中文高清版.pdf》-笔记
D.2.1 安插自己的测试代码 插入下述“显式”计时代码,对程序进行评测: long start = System.currentTimeMillis(); // 要计时的运算代码放在这儿 long ...
- 《Java编程思想第四版》附录 C Java 编程规则
附录 C Java 编程规则 本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符 ...
随机推荐
- 小白学 Python(5):基础运算符(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 详解AJAX工作原理以及实例讲解(通俗易懂)
什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...
- opencv::图像矩(Image Moments)
矩的概念介绍 1.几何矩 2.中心距 3.中心归一化距 4.图像中心Center(x0, y0) 计算矩 moments( InputArray array, // 输入数据 bool binaryI ...
- openssl之DH(Diffie–Hellman)加密
//加密机制初始化 g_HDMgr.init(); //对方的public key BIGNUM* peerPubKey = NULL; peerPubKey = BN_bin2bn((unsigne ...
- pytest6-Fixture finalization / executing teardown code(使用yield来实现)
Fixture finalization / executing teardown code By using a yield statement instead of return, all the ...
- python学习-多线程并发
1.线程与进程 通俗解释: 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进 ...
- nuxt.js部署vue应用到服务端过程
由于seo的需要,最近将项目移植道nuxt.js下采用ssr渲染 移植完成后,一路顺畅,但是到了要部署到服务器端上时候,还是个头疼的问题,但最终还是顺利完成.现在记录一下部署中的过程. 注:部署时候过 ...
- zookeeper - 通过java代码连接zookeeper(2)
首先创建一个Maven项目 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- 解决 Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException: XXXCriteria$Criterion.noValue
问题 这个noValue一定存在,但是报错. 场景就是存在并发的情况下,尤其是在服务刚刚启动的时候,就会发生这个异常. 但是很不幸,mybatis 3.4.1之前,用的 OGNL都是由这个问题. 分析 ...
- 分享一次大厂的技术面试通过,却因学历被拒发 offer 的悲惨经历
概述 今天心情很down,快周末了,说点不开心的事情给大家开心一下,上周面试心仪已久的大厂,技术面很顺利的通过一面/二面/三面,最后到HR面也很顺利,然后被问到学历(自考本科)后,HR 语气发生一些转 ...