首页 > 代码库 > java面向对象2
java面向对象2
访问控制符:
private、default、protected、public
同一个类中 √ √ √ √
同一个包中 √ √ √
子类中 √ √
全局范围 √
访问控制符来控制:Field、方法、构造器能否被其他类访问到。
面向对象三大特征:
1、封装:
将对象的状态信息隐藏在对象内部,不允许外部程序直接访问,只可以通过该类提供的方法来对内部信息进行操作和访问。
class DemoA { // 通过访问控制符,将Field隐藏,外界无法访问 private int age; //通过getter、setter方法,提供对Field的操作、访问 public int getAge() { return age; } public void setAge(int age) { if(age<0){ System.out.println("输入的参数不合法"); } else { this.age = age; } } } public class OOP { public static void main(String[] args) { DemoA demoA = new DemoA(); demoA.setAge(100); System.out.println(demoA.getAge()); } }
2、继承
所谓的继承通过extends关键字来实现,子类可以获得父类中所有可以被继承的Field和方法。
Field:
当子类中定义和父类相同的Field的时候,子类中的Field将会隐藏父类中的Field。
class SuperClass { public int weight = 2; } class SubClass extends SuperClass { public int weight = 3; public void info() { //调用父类的weight System.out.println("this weight super:" + super.weight); //调用子类的weight System.out.println("this weight sub:" + weight); } } public class ExtendsDemo { public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.info(); } }
Field的访问顺序:
1、(如果在方法中)查找该方法中是否存在该局部变量
2、查找当前类是否存在该Field
3、查找该类的直接父类,是否存在该Field,依此类推,知道追溯到java.lang.Object,没有就报错。
Methd:
子类可以继承得到父类的可被继承的方法,同时可以覆盖父类中继承过来的方法。
class Bird{ public void fly(){ System.out.println("Bird can fly"); } } class Ostrich extends Bird{ public void fly() { System.out.println("Ostrich can not fly"); } //通过super来调用被覆盖的父类的方法 public void fly2(){ super.fly(); } } public class ExtendsDemo2 { public static void main(String[] args) { Ostrich ostrich = new Ostrich(); ostrich.fly(); ostrich.fly2(); } }
子类在覆写父类的方法时,遵守如下约定:
“两同两小一大”
“两同”:方法名相同、形参列表相同
“两小”:返回值类型更小或者相等、异常更小或者相等
“一大”:访问权限更大或者相等
3、多态
java引用变量有两个类型:一个是编译时类型;一个是运行时类型。当编译时类型与运行时类型不一致的时候,就会出现所谓的多态。