thinking in java 一 接口于多重继承

最近活少了很多 打算补一补基础 ! 再看一边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的实例对象就因为实现了这三个接口 所以调用时自动向上转型这就是所谓的接口会调
接口会调允许一个类向上转型为多个不同类型!而且在实际处理中经常是对一个接口特点进行操作最典型的应用就是控制器!
控制起的则是设计模式的问题 呵呵! 现不说那些高深的 今天就到这里!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Thinking in Java》是一本经典的Java编程入门教材,通过阅读该书可以系统地学习Java编程的基础知识和高级概念。阅读过程中,我结合自己的学习体验和实践,进行了详细的学习笔记。 首先,该书从基础语法开始介绍,包括数据型、控制语句、数组等。对于初学者来说,这些基础知识是最基本的,通过书中的示例代码和解析,我能够更好地理解这些概念和语法规则。 其次,书中对面向对象编程进行了深入的讲解。通过学习面向对象的思想,我明白了对象、继承、多态等概念的含义和使用方法。同时,书中还讲解了接口、内部、异常处理等较为高级的概念,极大地拓宽了我的Java知识面。 另外,该书还介绍了Java的常见库和工具,如字符串操作、集合框架、输入输出、线程等。这些内容对于实际开发非常有用,而且书中的示例代码也能帮助我更好地理解和应用这些库和工具。 此外,该书通过大量的实例和案例,生动地展示了Java编程的实战应用。这些实例涵盖了各种不同的应用场景,从简单的程序到复杂的项目,都有所涉及。通过分析这些实例,我不仅可以学习到实际编程的技巧,还能提高自己的解决问题的能力。 总的来说,读完《Thinking in Java》后,我对Java编程有了更深入的理解和掌握。通过学习笔记的整理,我不仅复习了各个知识点,还加深了对这些概念的理解。希望这份学习笔记能够帮助到其他想要学习Java的同学,让他们能够更快地入门和掌握这门编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值