文章列表
这一章节我们来讨论一下适配的问题?
说白了,就是可以使用任何对象调用某个方法,而这个对象只需要符合某种协议。
而这种协议的实现有两种方法:继承和接口,但是一般都是使用接口,因为他的代码复用性比继承强,而 ...
- 2015-11-09 20:45
- 浏览 312
- 评论(0)
我们这一章节来讨论一下怎样通过继承扩展接口。
接口跟类一样,具有继承的特性,但是他只是继承接口,不继承类。
package com.ray.ch07;
interface WhatPersonCanDo {
void run();
void sleep();
}
interface WhatSingerCanDo extends WhatPersonCanDo {
void sing();
}
class Singer implements WhatSingerCanDo {
@Override
public void run() {
// ...
- 2015-11-09 19:54
- 浏览 586
- 评论(0)
这一章节我们来说一下接口另一个特性:多重接口。
在平常,使用继承,我们只是继承某一类,只能够一种向上转型,但是在接口的使用方面,可以实现多个接口,然后实现多种的向上转型。
我们先上代码:
package com.ray.ch07;
public class Test {
public static void testSwim(CanSwim canSwim) {
canSwim.swim();
}
public static void testEat(CanEat canEat) {
canEat.eat();
}
public static ...
- 2015-11-08 23:16
- 浏览 324
- 评论(0)
这一章节我们来讨论一下接口怎么样解耦?使得代码灵活性增强。
我们先来看看下面的代码:
package com.ray.ch07;
public class Test {
public static void test(Vehicle vehicle) {
vehicle.test();
}
public static void main(String[] args) {
test(new BMW());
test(new Audi());
}
}
class Vehicle {
public void test() {
System.out.println(&q ...
- 2015-11-08 22:47
- 浏览 522
- 评论(0)
这一章节我们来讨论一下接口。
之前我们已经聊过抽象类,他已经进行了第一步的抽象,把某些方法抽象出来,然后在子类那里实现,但他不是完全抽象。
而接口,就是进一步抽象,它里面全是没有实现的方法,所以的方法都在实现类里面实现。
1.概念
接口:就像类与类之间的一种协议,只需要知道某个类实现的某个接口, 那么,他就可以通过调用接口里面的方法来指向这个类的实现。
2.特性
(1)使用interface标注
(2)完全抽象
(3)属性域必须是public final static(这个是编译器自动转换的)
(4)方法必须是public
(5)向上转型,为父类指向子类对象提供途径,同时也使得java拥有多态 ...
- 2015-11-08 14:11
- 浏览 349
- 评论(0)
这一章节我们来讨论一下初始化与类的加载。
简单的说,类是在static成员被访问的时候加载的。
我们下面举一个比较复杂的例子,然后解释一下加载和初始化的顺序。
package com.ray.ch06;
public class Sub extends Father {
private int b = print("b");// 5
private static int c = print("c");// 1
public Sub() {
System.out.println("create sub");// 6
} ...
- 2015-11-03 23:07
- 浏览 362
- 评论(0)
这一章节我们来讨论两个话题,一个是使用final标识的类,一个是使用final的忠告。
1.使用final表示的类
主要目的就是不想其他程序员继承这个类,而且类里面的东西永远不变。
package com.ray.ch06;
public class Sub extends Father {//抛异常
}
final class Father {
}
上面是错误的代码,编译器抛异常,sub不能够继承father。
2.使用final的忠告。
虽然我们使用了比较多的篇幅来讨论final,但是final在平常真的使用不多,大部分的情况就是不可变的常量。
如果把他使用在方法和类上面,对于后来 ...
- 2015-11-03 22:44
- 浏览 311
- 评论(0)
这一章节我们来说一下final修饰的方法。
1.final与public
其实,使用final修饰方法,只不过就是不想继承的时候被修改。
一般我们继承的时候都可以覆盖public的方法,如下:
package com.ray.ch06;
public class Sub extends Father {
@Override
publi ...
- 2015-11-03 22:33
- 浏览 414
- 评论(0)
接着上一章节的内容。
昨天我回去想了一下,发觉最后的那个特性还是有点问题,我就做了以下的实验。
昨天最后一点属性的简化版:
package com.ray.ch06;
public class Test {
private final String name = "abcd";
public String getName() {
return name;
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
Sys ...
- 2015-11-03 11:44
- 浏览 279
- 评论(0)
这一章节我们将来讨论一下final。
1.特性
(1)对于常量,使用final之后就不可变
因为使用了final之后,id就没有了set方法,因此,不能对id进行操作,即便new之后直接对id进行操作也不可以
package com.ray.ch06;
public class Test {
private final int id = 1;
public int getId() {
return id;
}
public static void main(String[] args) {
// new Test().id=2;//error
}
}
(2)对于对象, ...
- 2015-11-02 17:09
- 浏览 429
- 评论(0)
这一章节我们来讨论一下向上转型。
1.例子
package com.ray.testobject;
public class Sub extends Father {
public static void main(String[] args) {
Sub sub = new Sub();
Father.say(sub);
}
}
class Father {
public void doSomeThing() {
System.out.println("doSomething");
}
public stati ...
- 2015-11-01 23:01
- 浏览 450
- 评论(0)
这一章节我们来聊一下在聚合与继承之间选择的问题。
在我们平常的编码里面,使用聚合或者继承都可以,或者两者可以混合使用也行,这个时候就需要做出抉择,因为代码以后还需要维护,怎么才能达到维护简单?代码可读?。。。
因此,我们必须在各种方案中做出抉择。
笔者是这样认为的:
如果新的类只是使用老的类的一部分功能,那么就是用聚合,直接new出来就可以了,满足need或者组合这个关系;
如果新的类必须是老的类的一个特殊例子,那么就是用继承,满足is-a或者is-like-a这种关系
例子:
车是交通工具。
代码:
/**
*
*/
package com.ray.ch05;
/**
* @Pac ...
- 2015-10-30 11:47
- 浏览 290
- 评论(0)
这一章节我们来讨论一些组合使用聚合和继承
之前已经讲过想过的基础知识以及注意点,现在我们直接上代码:
1.例子
package com.ray.ch05;
public class PlaceSetting extends Custom {
private DinnerPlate dinnerPlate;
private Spoon spoon;
private Fork fork;
...
- 2015-10-30 11:19
- 浏览 492
- 评论(0)
接着上一章节。
(4)无参构造器初始化
这里我们来聊聊初始化的话题,特别是初始化基类,父类会怎样?
继续沿用上面的代码,我们做出一些精简。
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
new Sub();
}
}
class Father {
public Father() {
System.out.println("create father");
}
}
class Sub extends Father {
pu ...
- 2015-10-29 23:40
- 浏览 271
- 评论(0)
这一章节我们来聊聊继承(Generalization)。
1.概念
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
2.特点
子类继承父类public和protected的属性域与方法,但不继承private的属性域和方法。
当子类基础父类的方法时,如果需要,可以覆盖(@override),重新实现。
下面是一个例子
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
}
}
class Father { ...
- 2015-10-29 23:23
- 浏览 263
- 评论(0)