0%

Java面向对象

1.面向对象特性

  1. 封装性

    指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体
    封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性。

    2.继承性

    指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。

    3.多态性

    方法重写和对象多态(子父对象之间的相互转换)

知识点:

  1. 向上转型可以当做隐藏自身的方法,所以,再转回来(向下转型)方法就会恢复原状。 该是你的还是你的。
  2. 直接向下转型,父类不具有子类的独有方法,所以即使转化成功,也是个残废儿子,还不如不转,所以直接报错转化失败。 不是你的你想都别想。
  3. 内存中,因为向上转型是父类的引用指向为子类的对象,所以,它只是指向了父类应该拥有的属性和方法,而子类的独有的方法和属性就不指向了(或者说隐藏了),当再强转到子类时。又重新指向了子类对象,那属于它的东西又恢复了。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Person{
    public void print(){
    System.out.println("一个普通人");
    }
    }
    class SuperMan extends Person{
    public void fly(){
    System.out.println("I can fly");
    }
    public void fire(){
    System.out.println("I can make fire out");
    }
    }
    public class Main {
    public static void main(String[] args) {
    Person person=new SuperMan();//向上转型
    person.print();
    SuperMan superMan=(SuperMan) person;//向下转型,强制转换
    superMan.fly();
    }
    }
  4. 通过分析可以发现向下转型本身是一件存在有安全隐患的操作,所以为了保证向下转型的正确性,往往需要在进行转型之前进行判断,判断某个实例是否是某个类的对象,这个就需要通过instanceof实现。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Main {
    public static void main(String[] args) {
    Person person=new SuperMan();//向上转型
    if(person instanceof SuperMan){
    SuperMan man=(SuperMan) person;
    man.print();
    }
    }
    }

2.面向对象开发步骤

  1. OOA 面向对象的分析
  2. OOD 面向对象的设计
  3. OOP 面向对象的编程

3.类与对象 (类是对象的模板,而对象是类的实例)

1.内存

堆内存:保存对象的真正数据,都是每个对象的属性内容。

栈内存:保存的是堆内存的控件地址。

2.构造方法定义:

  1. 构造方法名称必须与类名称保持一致
  2. 构造方法不允许设置任何的返回值类型,即:没有返回值定义
  3. 构造方法是在使用关键字new实例化对象的时候自动调用的。

4.this

1.this

  1. 使用this调用当前类中属性:this.属性
  2. 当前类中的方法(普通方法、构造方法):this(),this.方法名称();
  3. 描述当前对象;

2.this调用方法

this除了调用属性之外,this也可以实现方法的调用,但是对于方法的调用就必须考虑构造与普通方法:

构造方法调用(this()):使用关键字new实例化对象的时候才会调用构造方法;

普通方法调用(this.方法名称()):实例化对象产生之后就可以调用普通方法。

5.构造方法

  1. 构造方法的名称与类名称保持一致
  2. 构造方法不允许有返回值类型声明
  3. 对象实例化操作一定要有构造方法

6.静态代码块、构造代码块、构造函数同时存在时的执行顺序

静态代码块 —>构造代码块 –> 构造函数;

7.static (关键字,是一个修饰符,用于修饰成员(成员变量和成员函数))

1.特点:

  1. 想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。
  2. 被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。
  3. 静态随着类的加载而加载,而且优先于对象存在。

2.弊端:

  1. 有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。

  2. 静态方法只能访问静态成员,不可以访问非静态成员。

    因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

  3. 静态方法中不能使用this,super关键字。

    因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。

  4. 主函数是静态的。

8.重载和重写的区别

9.super和this的区别

-------------本文结束元宝感谢您的阅读-------------