`
李灵晖-raylee
  • 浏览: 135711 次
博客专栏
Group-logo
从头认识java
浏览量: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() { // ...
这一章节我们来说一下接口另一个特性:多重接口。 在平常,使用继承,我们只是继承某一类,只能够一种向上转型,但是在接口的使用方面,可以实现多个接口,然后实现多种的向上转型。 我们先上代码: 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 ...
这一章节我们来讨论一下接口怎么样解耦?使得代码灵活性增强。 我们先来看看下面的代码: 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 ...
这一章节我们来讨论一下接口。 之前我们已经聊过抽象类,他已经进行了第一步的抽象,把某些方法抽象出来,然后在子类那里实现,但他不是完全抽象。 而接口,就是进一步抽象,它里面全是没有实现的方法,所以的方法都在实现类里面实现。 1.概念 接口:就像类与类之间的一种协议,只需要知道某个类实现的某个接口, 那么,他就可以通过调用接口里面的方法来指向这个类的实现。 2.特性 (1)使用interface标注 (2)完全抽象 (3)属性域必须是public final static(这个是编译器自动转换的) (4)方法必须是public (5)向上转型,为父类指向子类对象提供途径,同时也使得java拥有多态 ...
这一章节我们来讨论一下初始化与类的加载。 简单的说,类是在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 } ...
这一章节我们来讨论两个话题,一个是使用final标识的类,一个是使用final的忠告。 1.使用final表示的类 主要目的就是不想其他程序员继承这个类,而且类里面的东西永远不变。 package com.ray.ch06; public class Sub extends Father {//抛异常 } final class Father { } 上面是错误的代码,编译器抛异常,sub不能够继承father。 2.使用final的忠告。 虽然我们使用了比较多的篇幅来讨论final,但是final在平常真的使用不多,大部分的情况就是不可变的常量。 如果把他使用在方法和类上面,对于后来 ...
这一章节我们来说一下final修饰的方法。 1.final与public 其实,使用final修饰方法,只不过就是不想继承的时候被修改。 一般我们继承的时候都可以覆盖public的方法,如下: package com.ray.ch06; public class Sub extends Father { @Override publi ...
接着上一章节的内容。 昨天我回去想了一下,发觉最后的那个特性还是有点问题,我就做了以下的实验。 昨天最后一点属性的简化版: 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 ...
这一章节我们将来讨论一下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)对于对象, ...
这一章节我们来讨论一下向上转型。 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 ...
这一章节我们来聊一下在聚合与继承之间选择的问题。 在我们平常的编码里面,使用聚合或者继承都可以,或者两者可以混合使用也行,这个时候就需要做出抉择,因为代码以后还需要维护,怎么才能达到维护简单?代码可读?。。。 因此,我们必须在各种方案中做出抉择。 笔者是这样认为的: 如果新的类只是使用老的类的一部分功能,那么就是用聚合,直接new出来就可以了,满足need或者组合这个关系; 如果新的类必须是老的类的一个特殊例子,那么就是用继承,满足is-a或者is-like-a这种关系 例子: 车是交通工具。 代码: /** * */ package com.ray.ch05; /** * @Pac ...
这一章节我们来讨论一些组合使用聚合和继承 之前已经讲过想过的基础知识以及注意点,现在我们直接上代码: 1.例子 package com.ray.ch05; public class PlaceSetting extends Custom { private DinnerPlate dinnerPlate; private Spoon spoon; private Fork fork; ...
接着上一章节。 (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 ...
这一章节我们来聊聊继承(Generalization)。 1.概念 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 2.特点 子类继承父类public和protected的属性域与方法,但不继承private的属性域和方法。 当子类基础父类的方法时,如果需要,可以覆盖(@override),重新实现。 下面是一个例子 package com.ray.testobject; public class Test { public static void main(String[] args) { } } class Father { ...
Global site tag (gtag.js) - Google Analytics