- 2
- 0
- 约6.95万字
- 约 15页
- 2017-08-19 发布于河南
- 举报
Java语言面向对象知识小结和答疑
面向对象知识小结及答疑
一、面向对象基本概念回顾
Java的面向对象概念,绝大部分是模拟现实世界中的事物而设计的。
继承:根据功能和用途,将类按照层次关系进行设计。越在下层的类,功能越多越具体;越在上层的类,其“权力”越大。
类一方面使得学习出现了暂时的困难,但也使得代码的复用变得很有意思。系统提供的标准类,其名字必须要经常查阅翻译辞典以加深印象。
构造方法:对象在新生成的时候必须要执行的方法,名字应该和类名字完全一致。
class A {
int x;
A() {
x = 2;
}
A(int x) {
this.x = x;
}
void print() {
System.out.println(“x=” + x);
}
}
默认情况下,A()构造方法默认是会自动生成的,当然里面一点代码都没有(也就是说,你不写的话,系统会帮你写上一个空架子的构造方法)。构造方法前面必须是没有“返回类型”的。
另外,类中的任何除构造方法之外的其它方法必须要“返回类型”的。
方法重载:在类中存在两个同名的方法,但方法的参数类型不相同。
void print(int x) {…}
void print(int a) {…}
注意,上面写的这两个方法不能叫重载的(参数个数、类型完全相同)
方法重写/覆盖:在子类和父中存在两个同名、同参数的方法。
访问修饰符:private,protected,public,(默认)
static,final
对类中的一个static方法来说,它可以直接通过类名进行调用,而不需要生成对象。
final放在一个变量前面,表示这是一个常量,只能有一个值。
final放在一个方法前面,表示这是一个不能被覆盖的方法。
final放在一个类前面,表示这是一个最终类,它不能被别的类继承。
抽象类:就是在class之前加了一个abstract的类,这样的类就不能用来生成对象了。因此,通常如果一个类不适合生成对象的话,我们就要把这个类定义成抽象的。或者,如果一个类中包含了没有方法体的方法(也就是抽象方法),这样的类也必须定义成抽象类。其它类继承了抽象类的话,就必须补全这个抽象类中的所有抽象方法的具体代码。
abstract class A {
int x;
abstract void print();
}
接口:在其中只定义抽象方法。接口的目的,是为了强制某些类中必须具有同样的方法。因此,只要类实现了接口,这些类就必须提供接口中方法的具体代码。因此这些类看起来就有了一些共性了(都包含了接口中规定的方法)。这是接口的一个强制规定。此外,接口中的抽象方法必须是public的,如果不写上的话,系统会自定帮我们加上。习惯上我们还是自己写上public。
interface C {
public void print();
}
class A implements C {
int x;
public void print() {
System.out.println(“x=” + x);
}
}
class B implements C {
public void print() {
System.out.println(“hello”);
}
}
上面的类A和类B因为实现了接口C,它们就必须提供接口C中规定的方法/函数,否则编译就报错了。这就是接口的一大特点。接口可以这样使用:
C c = new A();
c.print(); // 其实是调用A类的对象中的print()方法
c = new B();
c.print(); // 其实是调用B类的对象中的print()方法
可见,接口变量能够指向任何实现了该接口的类的对象,但只能调用对象中的那些“由接口规定的”方法。
对接口变量c来讲,无论它指向的是A类对象还是B类对象,接口变量c只知道对象中有print()方法(也就是接口C中规定的方法),对象中的其它内容,接口变量c则一无所知。
如同一个USB接口,可以插上任何实现了USB接口的实际设备,如插上优盘、移动硬盘等等。但是若移动硬盘还有MP3播放功能的话,我们的USB接口也不会知道。USB接口仍会把这种带有MP3播放功能的移动硬盘当作普通的移动硬盘来对待。
那么在Java中又为什么需要接口呢?我们再看上面的这两个类,改写一下(去掉了imp
原创力文档

文档评论(0)