最近活少了很多 打算补一补基础 ! 再看一边Thinking In java 为了加深印象 决定在这里写下笔记同期记录自己学习的进度! 希望大家能多多指教!
废话不多说我按我的顺序开始 现从第八章开始:
java的多重继承
java多重继承是依靠实现接口来实现的,去掉了C++引以为荣的多重继承java当然要想办法弥补这一特性于是引入了接口 呵呵! (当然接口还有其他用途);
接口实现多重继承其实跟原来的Abstract比起来已经有很大进不了比如:
如果狗的主人只是希望狗能爬比较低的树,但是不希望它尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。那么狗
的主人肯定不会要一只猴子继承的狗。
设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那
么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。
这是我见过最好的例子了! 原文引用!
使用接口需要什么原则? 让我们实验一下!
//Illegal modifier for the interface interfaceone; only public & abstract are permitted
//接口只允许是public abstract
interface interfaceone{
//int ONENUMBER2;
//The blank final field ONENUMBER2 may not have been initialized
//这是Eclipse提醒的原文 指出final字段必须初始化!
int ONENUMBER = 5;
//private void f();
//Illegal modifier for the interface method f; only public & abstract are permitted
//这是Eclipse提醒的原文 接口中的方法必须是public abstract!
//abstract 类能有非abstract的方法么?
void f();
//什么都不家等于加了public abstract
}
public class Chapter001 implements interfaceone{
//public abstract void abstactf();
//The abstract method abstactf in type Chapter001 can only be defined by an abstract class
//abstract 方法只能在abstract类中定义
public void noabstract(){
//this is no abstact
System.out.println("abstract类的非abstract方法!");
}
@Override
public void f() {
//在没有实例化的情况下调用字段
System.out.println(interfaceone.ONENUMBER); //输出5 说明接口字段是静态的
}
}
总结一下:
1.接口只允许是public abstract
2.接口中所有属性都是final static指出final字段必须初始化!
3.接口中的方法必须是public abstract!
4.abstract 方法只能在abstract类中定义
下面在看接口实现多重继承 接口实现了比原来Class更详细的功能划分 确切说是实现了细粒度的功能划分
下面是一个书中的例子 现定义了Fight,Swim,Fly,三个接口
ActionCharacter实现了Fight接口
Hero 继承了ActionCharacter实现了这三个接口 然后去调用三个函数
这里Hero没有再实现Fight接口而是引用了ActionCharacter实现的接口 这里 implements CanFight, CanSwim, CanFly其实只要 implements CanSwim, CanFly就足够了
试想一下:1.实现接口可以不去实现函数么?
2.如果是一个abstract类呢?
//: c08:Adventure.java
// Multiple interfaces.
interface CanFight {
void fight();
}
interface CanSwim {
void swim();
}
interface CanFly {
void fly();
}
class ActionCharacter {
public void fight() {}
}
class Hero extends ActionCharacter
implements CanFight, CanSwim, CanFly {
public void swim() {}
public void fly() {}
}
public class Adventure {
public static void t(CanFight x) { x.fight(); }
public static void u(CanSwim x) { x.swim(); }
public static void v(CanFly x) { x.fly(); }
public static void w(ActionCharacter x) { x.fight(); }
public static void main(String[] args) {
Hero h = new Hero();
t(h); // Treat it as a CanFight
u(h); // Treat it as a CanSwim
v(h); // Treat it as a CanFly
w(h); // Treat it as an ActionCharacter
}
} ///:~
上面代码中有3个静态函数u,v,w 这三个函数的参数是不相同的,但是却都接受了Hero的实例对象就因为实现了这三个接口 所以调用时自动向上转型这就是所谓的接口会调
接口会调允许一个类向上转型为多个不同类型!而且在实际处理中经常是对一个接口特点进行操作最典型的应用就是控制器!
控制起的则是设计模式的问题 呵呵! 现不说那些高深的 今天就到这里!
废话不多说我按我的顺序开始 现从第八章开始:
java的多重继承
java多重继承是依靠实现接口来实现的,去掉了C++引以为荣的多重继承java当然要想办法弥补这一特性于是引入了接口 呵呵! (当然接口还有其他用途);
接口实现多重继承其实跟原来的Abstract比起来已经有很大进不了比如:
如果狗的主人只是希望狗能爬比较低的树,但是不希望它尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。那么狗
的主人肯定不会要一只猴子继承的狗。
设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那
么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。
这是我见过最好的例子了! 原文引用!
使用接口需要什么原则? 让我们实验一下!
//Illegal modifier for the interface interfaceone; only public & abstract are permitted
//接口只允许是public abstract
interface interfaceone{
//int ONENUMBER2;
//The blank final field ONENUMBER2 may not have been initialized
//这是Eclipse提醒的原文 指出final字段必须初始化!
int ONENUMBER = 5;
//private void f();
//Illegal modifier for the interface method f; only public & abstract are permitted
//这是Eclipse提醒的原文 接口中的方法必须是public abstract!
//abstract 类能有非abstract的方法么?
void f();
//什么都不家等于加了public abstract
}
public class Chapter001 implements interfaceone{
//public abstract void abstactf();
//The abstract method abstactf in type Chapter001 can only be defined by an abstract class
//abstract 方法只能在abstract类中定义
public void noabstract(){
//this is no abstact
System.out.println("abstract类的非abstract方法!");
}
@Override
public void f() {
//在没有实例化的情况下调用字段
System.out.println(interfaceone.ONENUMBER); //输出5 说明接口字段是静态的
}
}
总结一下:
1.接口只允许是public abstract
2.接口中所有属性都是final static指出final字段必须初始化!
3.接口中的方法必须是public abstract!
4.abstract 方法只能在abstract类中定义
下面在看接口实现多重继承 接口实现了比原来Class更详细的功能划分 确切说是实现了细粒度的功能划分
下面是一个书中的例子 现定义了Fight,Swim,Fly,三个接口
ActionCharacter实现了Fight接口
Hero 继承了ActionCharacter实现了这三个接口 然后去调用三个函数
这里Hero没有再实现Fight接口而是引用了ActionCharacter实现的接口 这里 implements CanFight, CanSwim, CanFly其实只要 implements CanSwim, CanFly就足够了
试想一下:1.实现接口可以不去实现函数么?
2.如果是一个abstract类呢?
//: c08:Adventure.java
// Multiple interfaces.
interface CanFight {
void fight();
}
interface CanSwim {
void swim();
}
interface CanFly {
void fly();
}
class ActionCharacter {
public void fight() {}
}
class Hero extends ActionCharacter
implements CanFight, CanSwim, CanFly {
public void swim() {}
public void fly() {}
}
public class Adventure {
public static void t(CanFight x) { x.fight(); }
public static void u(CanSwim x) { x.swim(); }
public static void v(CanFly x) { x.fly(); }
public static void w(ActionCharacter x) { x.fight(); }
public static void main(String[] args) {
Hero h = new Hero();
t(h); // Treat it as a CanFight
u(h); // Treat it as a CanSwim
v(h); // Treat it as a CanFly
w(h); // Treat it as an ActionCharacter
}
} ///:~
上面代码中有3个静态函数u,v,w 这三个函数的参数是不相同的,但是却都接受了Hero的实例对象就因为实现了这三个接口 所以调用时自动向上转型这就是所谓的接口会调
接口会调允许一个类向上转型为多个不同类型!而且在实际处理中经常是对一个接口特点进行操作最典型的应用就是控制器!
控制起的则是设计模式的问题 呵呵! 现不说那些高深的 今天就到这里!