Java OOP
构造方法
对象被创建时用来初始化对象所调用的方法
- 构造方法名必须和类名一致
- 如果没有自定义构造方法, 会默认定义空构造方法.
继承
extends
继承类
implements
实现接口
特性
- 拥有父类非
private
的属性和方法 - 可以拥有自己的属性和方法(对父类进行扩展)
- 可以用自己的方式重写(覆盖)父类的方法
- 只能继承1个类, 但可以实现多个接口.
对象引用
super
当前对象的父对象引用
this
当前对象的引用
构造方法
用super调用父类的构造方法必须放在子类构造方法的第一句
重载
相同的方法名, 不同的参数, 用来调用不同的方法
java code
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
重写
覆盖父对象的方法, 使用父对象方法使用super
在重写方法上方加入@Override
注解, 区分普通方法.
java code
class Animal {
public void eat() {
System.out.println("eat sth");
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("eat bone");
}
}
public class OverrideDemo {
public static void main(String args[]){
Animal animal = new Animal();
Animal dog = new Dog();
animal.eat();
dog.eat();
}
}
多态
父对象的引用指向子对象, 再进行操作.
java code
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("eat fish");
}
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("eat bone");
}
}
public class PolyDemo {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
cat.eat();
dog.eat();
}
}
访问控制
可以修饰类, 变量和方法
修饰符 | 功能 |
---|---|
public | 无限制访问 |
protected | 类与子类中访问 |
default | 同文件内访问 |
private | 只能在类中访问 |
抽象类
abstract class
1. 不能被实例化.
2. 有抽象方法的类是抽象类, 反之不成立.
3. 抽象方法只有声明, 没有实现.
4. 构造方法和类方法(静态方法)不能声明为抽象方法.
5. 子类必须给出抽象方法的具体实现, 除非子类也是抽象类.
接口
interface
除了以下2点外与抽象类相同
1. 方法是自动被public
修饰的抽象方法
2. 变量自动被public static final
修饰
包
创建包
在源文件第一行声明包名
package PKG_NAME;
导入包中的类
包的组织结构与目录结构相同, 用.
分隔
import PKG_NAME.CLASS
导入包中特定类
import PKG_NAME.*
导入包中所有类
内部类
可以访问外部类中成员, 无访问修饰符限制.
成员内部类
- 不能存在任何static的变量和方法
- 依附于外围类, 只有先创建了外围类才能够创建内部类
声明方法
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
局部内部类
- 作用域只有在方法内
匿名内部类
- 只有父类的名字, 直接继承/实现.
- 只能使用方法作用域中的
final
局部变量
静态内部类
- 创建不需要依赖于外围类
- 只能使用外围类的
static
成员变量和方法