首页 > 代码库 > 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引用变量有两个类型:一个是编译时类型;一个是运行时类型。当编译时类型与运行时类型不一致的时候,就会出现所谓的多态。