文章列表
这一章节我们来简单说一下类型安全的容器。
说到类型安全,不得不说的是泛型,当然,我们在这里只是简单的介绍一下泛型怎么使用,后面的章节会继续展开。
1.怎么才算类型安全?
一个反例:
package com.ray.ch09;
import java.util.ArrayList;
public class Test {
private ArrayList fruitList = new ArrayList();
public void addOrange(Orange orange) {
fruitList.add(orange);
}
public v ...
- 2015-11-16 21:05
- 浏览 443
- 评论(0)
这一章节我们将简短的讨论一下内部类的继承。
例子:
package com.ray.ch08;
import com.ray.ch08.Test.Inner;
public class MyClass extends Inner {
public MyClass(Test test) {
test.super();
}
}
class Test {
class Inner {
}
}
上面的代码展示了内部类的继承。注意:外部类必须先初始化。
我们都知道,内部类其实持有隐含的外部类引用,但是当我们继承内部类时,由于外部类的引用在这个时候不明确,因此必须初始化出来。
总结:这一 ...
- 2015-11-15 22:25
- 浏览 320
- 评论(0)
接着上一章节,上一章节主要讲述的是因为多重继承,这一章节我们来结束另外一个原因:闭包和内部框架。
1.闭包
闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
其实是说白了,闭包的作用就是,之前你已经建立了对象,而且在对象里面存储了某些状态,然后现在你通过内部类,拿到对象的引用,从而取得现有状态,用在当前的代码里面。
package com.ray.ch08;
public class MyClass extends Test2 {
private int id = 0;
@Overri ...
- 2015-11-15 22:19
- 浏览 413
- 评论(0)
这一章节我们来讨论一下为什么需要内部类?
答案:为实现多重继承提供便利。
在实现多重继承方面有两种方式:内部类以及接口。
1.接口
package com.ray.ch08;
public class Sequence implements A, B {
}
interface A {
}
interface B {
}
接口其实不用多说,你实现多少个都可以,然后只有根据接口就可以向上转型,调用相关的方法。
2.内部类
当我们需要继承实现的是类或者抽象类,根据语法规则,是不可以多重继承的,那么现在内部类就发挥作用了。
package com.ray.ch08;
public cla ...
- 2015-11-14 20:40
- 浏览 362
- 评论(0)
这一章节我们来讨论一下接口里面的类。
1.接口里面的类:其实说的是接口里面的嵌套类(使用static的内部类)。
interface Destination {
String read();
class Test2 implements Destination {
private String label = "abc";
@Override
public String read() {
return label;
}
}
}
2.特性(1)在接口里面一般不能放置实现,但是嵌套类是一个例外,因为嵌套类在接口里面自动转换成public sta ...
- 2015-11-13 16:22
- 浏览 331
- 评论(0)
这一章节我们来讨论一下嵌套类。
1.概念
内部类使用static的时候就是嵌套类。
package com.ray.ch07;
public class Test {
private static class MyTest3{}
}
MyTest3就是嵌套类
2.注意点
(1)只能跟外部类的static部分进行通信
(2)不在持有外部类对象的引用,可以直接使用static特性
package com.ray.ch07;
public class Test {
private int id = 1;
private static String name = "aaa& ...
- 2015-11-13 11:36
- 浏览 489
- 评论(0)
这一章节我们再来重访工厂方法,使用匿名内部类来改造工厂方法。
之前的文章:7.8 接口与工厂模式
我们上一次工厂方法的例子:
package com.ray.ch07;
interface Service {
void doSomeThing();
}
interface ServiceFactory {
Service getService();
}
class ServiceImpl implements Service {
@Override
public void doSomeThing() {
}
}
class ServiceFactoryImpl imple ...
- 2015-11-12 22:04
- 浏览 431
- 评论(0)
这一章节我们来讨论一下匿名内部类。
我们之前已经提到了内部类,如下:
package com.ray.ch03;
public class Test {
private class OneTest implements MyTest {
@Override
public void test() {
}
}
private MyTest myTest() {
return new OneTest();
}
public static void main(String[] args) {
new Test().myTest();
}
}
interface ...
- 2015-11-12 21:41
- 浏览 424
- 评论(0)
这一章节我们来聊一下在方法和作用域里的内部类。
1.为什么需要在方法和作用域里的内部类?
(1)隐藏代码。
(2)处理复杂的问题,需要辅助类。
package com.ray.ch10;
public class Test {
{
class PDestination {
}
}
public Destination tes ...
- 2015-11-12 17:00
- 浏览 438
- 评论(0)
这一章节我们来讨论一下内部类与向上转型。
跟普通的类一样,内部类也可以实现某个接口然后向上转型。
为什么?
因为这样能够更好的隐藏实现的细节,基本其他程序员使用继承来扩展接口和方法都不能访问相关实现。
package com.ray.ch03;
public class Test {
private class Person implements CanRun {
@Override
public void run() {
System.out.println("run");
}
}
public Person getPerson() {
...
- 2015-11-11 22:42
- 浏览 506
- 评论(0)
这一章节我们来聊一下内部类的.this和.new语法。
其实上面写的有点问题,准确的说法是外部类对象.this和外部类对象.new
例子:
package com.ray.ch03;
public class Test {
private int testId = 1;
public Test() {
System.out.println(testId);
}
class MyTest {
private int myTestId = 0;
public MyTest() {
this.myTestId = Test.this.testId + 1;
S ...
- 2015-11-11 21:42
- 浏览 378
- 评论(0)
这一章节我们来讨论一下内部类链接到外部类的几个方面。
上一章节主要展示了内部类封装一些实现,使得代码隐藏,但是内部类还可以链接到外部类,无需特殊条件,即可访问外部类的任何成员(属性域和方法),即它拥有外部类所有访问权限。
package com.ray.ch08;
public class Test {
private int id = 0;
public String name = "aaa";
private void say() {
System.out.println("Class Test Method say");
}
...
- 2015-11-10 21:39
- 浏览 247
- 评论(0)
这一章节我们来讨论一下内部类。
1.概念
在类的内部创建的类就是内部类。
package com.ray.ch08;
public class Test {
class Destination {
}
class Content {
}
}
上面的Destination和Content就是内部类。
2.为什么需要内部类?
(1)隐藏代码
package com.ray.ch08;
import com.ray.ch08.Test.Destination;
public class Test {
class Destination {
}
private clas ...
- 2015-11-10 21:09
- 浏览 371
- 评论(0)
这一章节我们来聊聊接口与工厂模式之间的关系。
接口是实现多重继承的途径,生成遵循某个接口协议的对象的典型方式是工厂设计模式。
这种设计模式使得接口与实现完全分开。
package com.ray.ch07;
interface Service {
void doSomeThing();
}
interface ServiceFactory {
Service getService();
}
class ServiceImpl implements Service {
@Override
public void doSomeThing() {
}
...
- 2015-11-09 22:56
- 浏览 375
- 评论(0)
这一章节只是展示一下嵌套接口的用法,实际用途笔者还没有摸索出来。
package com.ray.ch07;
import com.ray.ch07.One.Two;
interface One {
interface Two {
void two();
}
void one();
class Three implements Two {
@Override
public void two() {
// TODO Auto-generated method stub
}
}
}
class Test impl ...
- 2015-11-09 22:39
- 浏览 462
- 评论(0)