java学习笔记2--面向对象编程(11)


25.8 模板方法设计模式25.8.1 模板方法的应用25.8.2 例子
public class TemplateTest {public static void main(String[] args) {SubTemplate subTemplate = new SubTemplate();subTemplate.sendTime();}}abstract class Template {public final void sendTime() {long start = System.currentTimeMillis();code();long end = System.currentTimeMillis();System.out.println(end = start);}//将code抽象化,让子类重写protected abstract void code();}class SubTemplate extends Template {@Overrideprotected void code() {for (int i = 0; i < 1000; i++) {for (int j = 0; j < 1000; j++) {}}}}
25.8 抽象方法应用实例26.接口
完整笔记
26.1 概述 26.1.1 定义
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须能…”的思想 。==继承是一个"是不是"(is a)的关系,而接口实现则是"能不能"的关系 。==接口的本质是契约,标准,规范,就像我们的法律一样 。制定好后大家都要遵守 。
26.1.2 格式
权限修饰符interface 接口名1,接口名2,....{}
26.1.3 意义26.1.4 细节26.1.5 实现类
格式:权限修饰符 class 类名父类名接口名{}
26.1.6 接口和类之间的关系
26.2 接口中的成员 26.2.1 JDK1.8之前
接口中只能有全局常量和抽象方法;
26.2.2 JDK1.8之后
接口中增加了静态方法(1.8)、默认方法(1.8)、私有方法(1.9)、私有静态方法(1.9);
26.2.3 默认方法
格式:[]返回值类型 方法名(参数){}
26.2.4 静态方法
格式:[]返回值类型 方法名(参数){}
26.2.5 抽象方法
格式:[] [] 返回值类型 方法名();
26.2.6 私有方法和私有静态方法
格式: [] 返回值类型 方法名(参数){}
26.2.7 全局常量
格式:[final] 类型 变量名 = 变量值;
26.3 抽象类与接口的异同26.4 应用实例26.5 父类的变量和接口中的变量相同
interfaceA{int x = 0;}class B{int x =1;}class C extends B implements A {public void pX(){System.out.println(x);//super.xA.x}public static void main(String[] args) {new C().pX();}}答案:错误 。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样) 。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确 。
27.内部类27.1 概述 27.1.1 定义
允许一个类A声明在另一个类B的内部,那么类A就是内部类,类B是外部类;根据类声明的位置,分为成员内部类(静态和非静态)和局部内部类(方法内、代码块内、构造器内);
27.1.2 不同类的权限修饰符27.1.3 意义
只有当前类使用此结构,所以定义为内部类 。
27.2 成员内部类 27.2.1 作为外部类的成员27.2.2 作为一个类27.2.3 实例化内部类
静态成员内部类:.A a = new .A();
非静态成员内部类:= new (); .B b = .new B();
public class InnerClass {public static class A{//成员内部类}class B{}}
27.2.4 细节27.2.5 内部类中调用外部类成员27.2.6 例题
public class OuterClass { private double d1 = 1.0; //insert code here } You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.) A. class InnerOne{public static double methoda() {return d1;}} B. public class InnerOne{static double methoda() {return d1;}} C. private class InnerOne{double methoda() {return d1;}} D. static class InnerOne{protected double methoda() {return d1;}} E. abstract class InnerOne{public abstract double methoda();} 说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员 。故 A、B 错二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错 。故 D 错三.非静态内部类的非静态成员可以访问外部类的非静态变量 。故 C 正确四.答案为C、E