面向对象(上)

来源:互联网 发布:淘宝估值 编辑:程序博客网 时间:2024/06/15 15:00

面向对象(上)

  1. Java是面向对象的程序设计语言。支持面向对象的三大特征:封装、继承和多态

    • 封装

      • 是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的访问。
      • 访问控制级别表
      权限范围 private default protected public 同一个类中 √ √ √ √ 同一个包中 √ √ √ 子类中 √ √ 全局范围 √
      • 关于访问控制符的使用基本原则
        • 1)类里绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。
        • 2)如果某个类主要用做其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰。
        • 3)希望暴露出来给其他类自由调用的方法使用public修饰。因此,类的构造器通常使用public修饰,允许在其他地方创建该类的实例。
      • Java的常用包
        • Java的核心类都放在java包以及其子包下,Java扩展的许多类都放在javax包以及其子包下。
      常用包 包含的类/接口 java.lang Java语言的核心类,如String、Math、System和Thread类等,系统自动导入 java.util Java的大量工具类/接口和集合框架类/接口,例如Arrays和List、Set等 java.net Java网络编程相关的类/接口 java.io Java输入/输出编程相关的类/接口 java.text Java格式化相关的类 java.sql Java进行JDBC数据库编程的相关的类/接口 java.awt 抽象窗口工具集的相关类/接口,用于构建图形用户界面(GUI)程序 java.swing Swing图形用户界面编程的相关类/接口,用于构建平台无关的GUI程序
    • 继承

      • 继承是实现软件复用的重要手段。Java的继承具有单继承的特点,每个子类只有一个直接父类。通过extends关键字实现,实现继承的类称为子类,被继承的类称为父类。
      • 通常子类总是以父类为基础,额外增加新的成员变量和方法。特殊情况需要重写父类方法。
      • 方法的重写遵循“两同两小一大”规则
        • 两同”即方法名相同、形参列表相同;
        • 两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
        • 一大”是指子类方法的访问权限硬币父类方法的访问权限更大或相等。
      • 当子类覆盖了父类的方法后,子类的对象无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中被覆盖的方法。
      • 如果需要在子类方法中调用父类方法中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的是类方法)作为调用者来调用父类中被覆盖的方法。
      • 如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此子类无法访问也无法重写该方法。

      重载主要发生在同一个类的多个同名方法之间,而重写发生在子类和父类的同名方法之间。

  2. 多态

    • 待续。。。
  3. this

    • 1)Java提供了一个this关键字,this关键字总是指向调用该方法的对象。
    • 2)根据this出现位置的不同,this作为对象的默认引用有两种情形;

      • 1、构造器中引用该构造器正在初始化的对象。
      • 2、在方法中引用调用该方法的对象。
        例如

        public class Dog{    public String name;    public Dog(){       this.name = "哮天犬";//情形1 代表dog对象    }    public void jump(){    }    public void run(){       this.jump();//情形2 代表dog对象    }    public static void main(String[] args){       Dog dog = new Dog();//创建dog对象       dog.run();    }}
    • 3)static修饰的方法中不能使用this引用。因为this无法指向合适的对象。
  4. super

    • 1)super是Java提供的一个关键字,super用于限定该对象调用它从父类继承得到的实例变量或方法。
    • 2)super可以调用父类的实例变量、方法或构造器。
      例如

      public class Base{    public double size = 5.0;    public String name = "对象1";    public Base() {    }    public Base(double size , String name){        this.size = size;        this.name = name;    }}public class Sub extends Base{    public String color;    public Sub() {    }    public Sub(double size,String name,String color){        //通过super调用父类构造器的初始化过程        super(size,name);        this.color = color;    }    public void testSuper(){            //通过super调用从父类继承来的实例变量            //5.0--对象1            System.out.println(super.size + "--" + super.name);   }    public static void main(String [] args){        Sub s1 = new Sub();        s1.testSuper();        Sub s = new Sub(6.0 , "对象2" , "红色" );        //输出6.0--对象2--红色        System.out.println(s.size + "--" + s.name + "--" + s.color);    }}
    • 3) super和this异同点
      • 1、super调用的是其父类的构造器,而this调用的是同一个类中重载的构造器。
      • 2、super和this不能同时出现,并且都必须出现在构造器第一行,原因是super因为子类继承了父类的属性和方法,所以需要先初始化父类的属性和方法;this放在第一行,其他构造函数中也有默认的super(),也是因为要先初始化父类和this代表的构造函数。
    • 4) 当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器执行之前执行;执行父类构造器时,系统会在此上溯执行其父类构造器……依此类推,创建任何Java对象,最先执行的总是java.lang.Object类的构造器。
0 0