`
李灵晖-raylee
  • 浏览: 135701 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论
文章列表
这一章节我们来简单说一下类型安全的容器。 说到类型安全,不得不说的是泛型,当然,我们在这里只是简单的介绍一下泛型怎么使用,后面的章节会继续展开。 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 ...
这一章节我们将简短的讨论一下内部类的继承。 例子: 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 { } } 上面的代码展示了内部类的继承。注意:外部类必须先初始化。 我们都知道,内部类其实持有隐含的外部类引用,但是当我们继承内部类时,由于外部类的引用在这个时候不明确,因此必须初始化出来。 总结:这一 ...
接着上一章节,上一章节主要讲述的是因为多重继承,这一章节我们来结束另外一个原因:闭包和内部框架。 1.闭包 闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。 其实是说白了,闭包的作用就是,之前你已经建立了对象,而且在对象里面存储了某些状态,然后现在你通过内部类,拿到对象的引用,从而取得现有状态,用在当前的代码里面。 package com.ray.ch08; public class MyClass extends Test2 { private int id = 0; @Overri ...
这一章节我们来讨论一下为什么需要内部类? 答案:为实现多重继承提供便利。 在实现多重继承方面有两种方式:内部类以及接口。 1.接口 package com.ray.ch08; public class Sequence implements A, B { } interface A { } interface B { } 接口其实不用多说,你实现多少个都可以,然后只有根据接口就可以向上转型,调用相关的方法。 2.内部类 当我们需要继承实现的是类或者抽象类,根据语法规则,是不可以多重继承的,那么现在内部类就发挥作用了。 package com.ray.ch08; public cla ...
这一章节我们来讨论一下接口里面的类。 1.接口里面的类:其实说的是接口里面的嵌套类(使用static的内部类)。 interface Destination { String read(); class Test2 implements Destination { private String label = "abc"; @Override public String read() { return label; } } } 2.特性(1)在接口里面一般不能放置实现,但是嵌套类是一个例外,因为嵌套类在接口里面自动转换成public sta ...
这一章节我们来讨论一下嵌套类。 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& ...
这一章节我们再来重访工厂方法,使用匿名内部类来改造工厂方法。 之前的文章: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 ...
这一章节我们来讨论一下匿名内部类。 我们之前已经提到了内部类,如下: 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 ...
这一章节我们来聊一下在方法和作用域里的内部类。 1.为什么需要在方法和作用域里的内部类? (1)隐藏代码。 (2)处理复杂的问题,需要辅助类。 package com.ray.ch10; public class Test { { class PDestination { } } public Destination tes ...
这一章节我们来讨论一下内部类与向上转型。 跟普通的类一样,内部类也可以实现某个接口然后向上转型。 为什么? 因为这样能够更好的隐藏实现的细节,基本其他程序员使用继承来扩展接口和方法都不能访问相关实现。 package com.ray.ch03; public class Test { private class Person implements CanRun { @Override public void run() { System.out.println("run"); } } public Person getPerson() { ...
这一章节我们来聊一下内部类的.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 ...
这一章节我们来讨论一下内部类链接到外部类的几个方面。 上一章节主要展示了内部类封装一些实现,使得代码隐藏,但是内部类还可以链接到外部类,无需特殊条件,即可访问外部类的任何成员(属性域和方法),即它拥有外部类所有访问权限。 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"); } ...
这一章节我们来讨论一下内部类。 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 ...
这一章节我们来聊聊接口与工厂模式之间的关系。 接口是实现多重继承的途径,生成遵循某个接口协议的对象的典型方式是工厂设计模式。 这种设计模式使得接口与实现完全分开。 package com.ray.ch07; interface Service { void doSomeThing(); } interface ServiceFactory { Service getService(); } class ServiceImpl implements Service { @Override public void doSomeThing() { } ...
这一章节只是展示一下嵌套接口的用法,实际用途笔者还没有摸索出来。 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 ...
Global site tag (gtag.js) - Google Analytics