`
鬼大来晚了
  • 浏览: 66238 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Java学习笔记——多态、接口、内部类

    博客分类:
  • Java
 
阅读更多
    大部分内容都是摘自《Thinking in Java》。

    多态是继数据抽象和继承之后的第三种基本特征。多态方法调用允许一种类型表现出与其他相似类型之间之间的区别,只要他们都是从同一个基类导出而来的。这种区别是根据方法行为的不同而表示出来的。
1、动态绑定机制:将一个方法调用同一个方法主体关联起来被称作绑定,在程序执行前进行绑定称为前期绑定,在运行时根据对象的类型进行绑定称为动态绑定或运行时绑定。
向上转型:我们定义一个方法,接收基类作为参数,当我们向该方法传递导出类参数时,方法会自动的根据对象类型调用导出类的行为。
2、在导出类中除了重写基类的方法,还可以定义自己的方法和域。这种称为扩展,经过扩展之后使得导出类和基类之间有一种"is-like-a"的关系。
3、多态的缺点:
(1)缺点:“覆盖”私有方法,只有非private方法才可以被覆盖。在导出类中,对于基类的private方法,最好采用不同的名字。
(2)缺点:域与静态方法,任何域访问操作都将由编译器解析,因此不是多态的。又,如果某个方法是静态的,他的行为就不具有多态性,静态方法是与类,而不是单个的对象相关联的。
3、复杂最想调用构造器的顺序:
(1)在其他任何事物发生之前,将分配给对象的存贮空间初始化为二进制的零;
(2)调用基类构造器;
(3)按照声明的顺序调用成员的初始化方法;
(4)调用导出类的构造器主体。

    接口和内部类为我们提供了一种将接口和实现分离的更加结构化的方法。
1、抽象方法:方法只有声明,没有方法体。包含抽象方法的类称为抽象类。
abstract void f();
2、接口(interface):提供一个完全抽象的类,只是提供了形式而未提供任何具体实现。
类继承接口使用关键字implements关键字。接口中的方法必须被定义为public。接口中的任何域都自动化是static和final的,
3、类可以继承多个接口,从而实现多重继承。实现接口的类同样可以向上转型为接口。
4、接口可以嵌套在类或其他接口中。

   可以将一个类的定义放在另一个类的内部,这就是内部类。
1、当生成一个内部类对象时,此对象与制造它的外部对象之间就有了一种联系。内部类可以访问其外围的类的方法和字段。
2、内部类使用外围类对象的引用,通过外部类.this实现。
必须使用外部类的对象来创建该内部类的对象。

OutClass oc = new OutClass();
OutClass.InnerClass ic=oc.new InnerClass();


3、局部内部类:在方法的作用域内创建一个完整的类;
4、匿名内部类:匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。

public class Main {

    public static void main(String[] args) {
        InnerTest inner = new InnerTest();
        Test t = inner.get(3);
        System.out.println(t.getI());
    }
}

class Test {  //超类
    private int i;
    public Test(int i) {
        this.i = i;
    }
    public int getI() {
        return i;
    }
}

class InnerTest {  //用于内部类的测试
    public Test get(int x) {
        return new Test(x) {  //创建匿名内部类,调用父类的构造方法
            @Override
            public int getI() {
                return super.getI() * 10;
            }
        };
    }
}


5、嵌套内部类:如果不需要内部类对象和外围类之间有联系,可以将内部类声明为static。这通常称为嵌套类。嵌套类可以作为外围接口的一部分,甚至可以在内部类中实现其外围接口。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics