JAVASE之内部类&继承
2016-01-07 22:59
288 查看
内部类的理解:
内部类的概念:在一个类中定义了另一个类,其中这个类作为外部类的成员来体现的。
内部类的使用场景:如果在一个类中需要使用另一个类的成员变量(这里只得私有)
就可以考虑使用内部类来实现了,不然就要通过方法来使用。内部类实质上也是一种封装的
思想的体现。
内部类就可以理解成一个类的成员变量,这里的成员变量可以使用修饰符来修饰的
当这里的内部类没有使用static关键字修饰的时候,访问内部类的方法采用的就是形如
Outer.Inner eg = new Outer().new Inner(); eg.show();其中这里的show就表示的是
内部类的一个方法,这里的理解就是要访问内部类的成员就是要通过一个外部类的来调用
他的成员(内部类),然后在通过内部类的对象来调用内部类的方法。
当使用static修饰内部类的时候,这时候就不需要对象了,这时候就相当于一个静态的
成员变量,在外部类加载的时候就已经加载了静态的内部类所以当要调用静态的内部类的方法
的时候就不需要对象了 Outer.Inner.function();其中这里的function表示的就是静态内部类
的一个静态的方法。
当一个内部类的方法使用了static修饰了,那么这个内部类也要使用static来修饰,否则的话
就会编译报错。
局部内部类:
所谓的局部的内部类就是在方法中定义了一个内部类,这种用法在实际的开发中用的不是很多
当一个局部的内部类要使用该方法中的局部的变量的时候,该变量要使用final修饰,否则会报错。
匿名内部类:
所谓的匿名内部类首先就要显示一个局部的内部类,匿名内部类有个前提就是继承一个父类
或者借口,在使用的时候就是直接的new一个父类或者实现的借口,然后实现父类或者接口中的
抽象方法,实例:new Lististon(){
void method(){
Sysout.out.println("匿名内部类的使用说明")
}
}.method();这里的.method前面部分就相当于创建了一个匿名内部类的对象,然后
调用这个对象的method()方法。这种代码的完成的写法就是一个class ListenImplement extends Lististon{
void method(){
Sysout.out.println("匿名内部类的使用说明");
}
}
new ListenImplement.method();
匿名内部的用法就是相当于后面的代码的编写。牢牢的记住,匿名内部类是相当于局部内部类的。
继承:
继承就是继承了父类种的所有的成员变量和函数,这里的函数
不包含构造函数,
注意:1.这里的构造函数是不能被覆盖的,注意和重载的区别,重载
是在一个类中,而覆盖是在有继承关系的父子类中,不能重载的原因
很是简单因为他们的方法名都不相同。
2.当创建一个子类对象的时候默认的会去调用父类种的无参的构造函数
其实在子类的构造函数中第一行省略了super()这句代码,如果要去调用
有参数的构造函数就要显示的去调用了。如果父类中没有无参的构造函数
在子类的构造函数中要显示的调用父类的构造函数。
3.如果在子类的构造函数中出现了this关键字,就不会在出现super关键字了
但是总之在子类的构造函数中肯定有一个去调用父类的一个构造函数。
内部类的概念:在一个类中定义了另一个类,其中这个类作为外部类的成员来体现的。
内部类的使用场景:如果在一个类中需要使用另一个类的成员变量(这里只得私有)
就可以考虑使用内部类来实现了,不然就要通过方法来使用。内部类实质上也是一种封装的
思想的体现。
内部类就可以理解成一个类的成员变量,这里的成员变量可以使用修饰符来修饰的
当这里的内部类没有使用static关键字修饰的时候,访问内部类的方法采用的就是形如
Outer.Inner eg = new Outer().new Inner(); eg.show();其中这里的show就表示的是
内部类的一个方法,这里的理解就是要访问内部类的成员就是要通过一个外部类的来调用
他的成员(内部类),然后在通过内部类的对象来调用内部类的方法。
当使用static修饰内部类的时候,这时候就不需要对象了,这时候就相当于一个静态的
成员变量,在外部类加载的时候就已经加载了静态的内部类所以当要调用静态的内部类的方法
的时候就不需要对象了 Outer.Inner.function();其中这里的function表示的就是静态内部类
的一个静态的方法。
当一个内部类的方法使用了static修饰了,那么这个内部类也要使用static来修饰,否则的话
就会编译报错。
局部内部类:
所谓的局部的内部类就是在方法中定义了一个内部类,这种用法在实际的开发中用的不是很多
当一个局部的内部类要使用该方法中的局部的变量的时候,该变量要使用final修饰,否则会报错。
匿名内部类:
所谓的匿名内部类首先就要显示一个局部的内部类,匿名内部类有个前提就是继承一个父类
或者借口,在使用的时候就是直接的new一个父类或者实现的借口,然后实现父类或者接口中的
抽象方法,实例:new Lististon(){
void method(){
Sysout.out.println("匿名内部类的使用说明")
}
}.method();这里的.method前面部分就相当于创建了一个匿名内部类的对象,然后
调用这个对象的method()方法。这种代码的完成的写法就是一个class ListenImplement extends Lististon{
void method(){
Sysout.out.println("匿名内部类的使用说明");
}
}
new ListenImplement.method();
匿名内部的用法就是相当于后面的代码的编写。牢牢的记住,匿名内部类是相当于局部内部类的。
继承:
继承就是继承了父类种的所有的成员变量和函数,这里的函数
不包含构造函数,
注意:1.这里的构造函数是不能被覆盖的,注意和重载的区别,重载
是在一个类中,而覆盖是在有继承关系的父子类中,不能重载的原因
很是简单因为他们的方法名都不相同。
2.当创建一个子类对象的时候默认的会去调用父类种的无参的构造函数
其实在子类的构造函数中第一行省略了super()这句代码,如果要去调用
有参数的构造函数就要显示的去调用了。如果父类中没有无参的构造函数
在子类的构造函数中要显示的调用父类的构造函数。
3.如果在子类的构造函数中出现了this关键字,就不会在出现super关键字了
但是总之在子类的构造函数中肯定有一个去调用父类的一个构造函数。
相关文章推荐
- PostgreSQL教程(三):表的继承和分区表详解
- Lua面向对象之类和继承浅析
- 浅析Ruby中继承和消息的相关知识
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++实现不能被继承的类实例分析
- PHP类的封装与继承详解
- js继承 Base类的源码解析
- Javascript 面向对象 继承
- JavaScript 继承使用分析
- Javascript面向对象编程(二) 构造函数的继承
- javascript面向对象之Javascript 继承
- JavaScript 对象、函数和继承
- 学习javascript面向对象 javascript实现继承的方式
- 关于JavaScript的面向对象和继承有利新手学习
- JavaScript 继承详解(一)
- JavaScript 继承详解(二)
- javascript继承的六大模式小结
- JavaScript中的原型和继承详解(图文)
- JavaScript中继承用法实例分析
- Javascript中3种实现继承的方法和代码实例