1.1、面向对象

2020-04-08  本文已影响0人  zhou_gai

一、面向对象
面向对象的三大特征:封装、继承、多态。

五大基本原则:单一职责原则(每个类只做一件事)、开放封闭原则(可扩展,不可修改)、依赖倒置原则(依赖抽象)、接口隔离(使用多的小接口,而非一个总接口)、里氏替换原则(子类能够替换基类)。

1、值传递与引用传递
Java中传递的参数分为两类,一类是基本类型,一类是引用类型,传递基本类型时是直接将值进行传递,引用类型的传参是传递应用类型的地址值。所以都可以叫做值传递。

2、三大特征的分析
多态:同一个接口使用不同的实例可以执行不同的操作。存在的必要条件:继承、重写、父类指向子类的引用。即子类继承自父类并重写父类中的方法,创建对象时,父类进行向上转型。例:Parent p = new Child(). 构造函数分为无参和带参构造函数,构造函数为了类提供了不同的创建实例方式。

3、变量
类变量:由static修饰的成员变量,为类的所有的实例对象所共享

成员变量:每个实例对象都有自己的成员变量,实例之间不进行成员变量的共享

局部变量:方法体之内的变量,只能在该方法之内被使用


public class VariableTest {

       // 类变量(静态变量)

       private static int STATIC_INTEGER = 10;

      // 成员变量

      private int i = 100;

      // 测试类变量

      public int staticTest() {

            STATIC_INTEGER++; return STATIC_INTEGER;

      }

      // 测试成员变量

      public int commonTest() {

            i++; return i;

      }

}

public class VariableTest01 {

    public static void main(String[] args) {

        // 测试静态变量是否为对象共享

         VariableTest v1 = new VariableTest();

        System.out.println(v1.staticTest()); // 11

         VariableTest v2 = new VariableTest();

        System.out.println(v2.staticTest()); // 12

         // 测试成员变量是否为对象共享

         VariableTest v3 = new VariableTest();

         System.out.println(v3.commonTest()); // 101

         VariableTest v4 = new VariableTest();

         System.out.println(v4.commonTest()); // 101

     }

}

4、类的加载顺序
1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化

2、只有在调用new方法时才会创建类的实例

3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行本类继承的子类的初始化块,最后是子类的构造方法

4、类实例销毁时候,首先销毁子类部分,再销毁父类部分


//  父类

public class Parent {

     public Parent() {

         System.out.println("父类构造方法");

    }

    {

        System.out.println("父类普通代码块");

     }

    static {

        System.out.println("父类静态代码块");

     }

    public static void method1(){

         System.out.println("父类静态方法");

     }

    public void method2() {

        System.out.println("父类普通方法");

   }

 }

public class Child extends Parent{

     public Child() {

          System.out.println("子类构造方法");

    }

     {

        System.out.println("子类普通代码块");

    }

    static {

        System.out.println("子类静态代码块");

    }

    public static void method1(){

         System.out.println("子类静态方法");

    }

     public void method2() {

        System.out.println("子类普通方法");

    }

 }

// 测试类

public class ClassInit {

    public static void main(String[] args) {

        Child child = new Child();

        child.method2();

        child.method1();

    }

}

结果:

父类静态代码块 子类静态代码块 父类普通代码块 父类构造方法 子类普通代码块 子类构造方法 子类普通方法 子类静态方法

上一篇 下一篇

猜你喜欢

热点阅读