关于static关键字
- static修饰的成员,不能被非static修饰的成员访问
- 被static修饰的变量称为类变量,被static修饰的方法称为类方法,他们被类的实例共享
- 使用static定义的方法可以由类名称直接调用
- 使用static类型声明的方法时,需要注意:如果类中声明了一个static类型的属性,则此类属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用,但若要用static类型的方法调用非static类型的属性,就会出现错误。
关于类的封装、继承与多态
封装
私有private | 默认default | 保护protected | 公有public | |
---|---|---|---|---|
类 | 只有内部类允许私有,只能在当前类中被访问 | 可以被当前包中的所有类访问 | 只有内部类可以设为保护权限,相同包中的类和其子类可以访问 | 可以被所有类访问 |
属性 | 只能被当前类访问 | 可以被相同包中的类访问 | 可以被相同包中的类和其子类访问 | 可以被所有类访问 |
方法 | 只能被当前类访问 | 可以被相同包中的类访问 | 可以被相同包中的类和其子类访问 | 可以被所有类访问 |
继承
- 防止代码重用
- 一个类只能集成一个类而不能继承多个类
- 虽然java不能使用多重继承但是可以使用多层继承,
- 从父类继承的私有成员,不能被子类直接使用
- 子类在进行对象实例化时,从父类继承而来的数据成员需要先调用父类的构造方法来初始化,然后再用子类的构造方法来初始化本地的数据成员。
- 被final修饰的方法不能被子类覆写实例,被final修饰的类不能再被继承
覆写
- 属性的覆盖,指的是子类定义了和父类之中名称相同的属性
- 方法的覆写与重载有相似之处,重载,即,方法名相同,方法的参数不同;覆写,如果子类中的方法与父类中的方法名称、参数个数及类型且返回值类型都完全一致,就称子类的方法覆写了父类中的方法。
多态
- 方法的多态性,即通过传递不同的参数来令同一方法接口实现不同的功能。
- 对象的多态性:向上转型和向下转型
- 向上转型,父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。
- 向下转型,与向上转型对应的一个概念,也就是说父类的对象可以转换为子类对象,但是需要注意的是,这时必须进行强制类型转换。
- 向上转型可以自动完成,向下转型必须进行强制类型转换。
class Animal{
public void move(){
System.out.println("动物移动");
}
}
class Fish extends Animal{
public void move(){
System.out.println("鱼儿游!");
}
}
class Bird extends Animal{
public void move(){
System.out.println("鸟儿飞!");
}
}
class Horse extends Animal{
public void move(){
System.out.println("马儿跑!");
}
}
public class ObjectPoly{
public static void main(String[] args){
Animal a;
Fish f = new Fish();
Bird b = new Bird();
Horse h = new Horse();
a = f; a.move();
a = b; a.move();
a = h; a.move();
}
}