Java面向对象基础概念

面向对象

1. 什么是面向对象

用人的世界观改变计算机的世界观(人是怎么想的,让计算机按照人的想法去实现)

1.1 对象

万物皆对象(静态:用属性来表示。 动态:用行为来表示)

1.2 类

具有相同属性和行为的一类事物

1.3 类与对象的关系

类是对象的模板,对象是类的实例

1.4 类的定义

关键字:class

public void class Person(){
   
}

Java程序中最基本的单位是:类

1.5 对象的实例化

// 类名   对象名  =  new  类名();  实例化对象(new对象)
 Person    p   =  new Person();
 p.name = "李四";

1.6 成员变量(全局变量)与局部变量

成员变量(全局变量):声明在类内,方法外的变量(作用域:该类所有地方都可以访问)

局部变量:声明在方法内的变量(作用域:在所声明的方法内部)

1.7 方法

1.7.1 格式

//访问控制修饰符   返回值类型   方法名(){ 代码块  }
  public         void       study(){
      //代码块
  }

1.7.2 分类:4类

  1. 无返回值,无参数

    public void eat(){
       
    }
  2. 无返回值,有参数

    public void eat(String name){
       
    }
  3. 有返回值,无参数

    public int eat(){
       int a;
       a = 1;
       return a;
    }
  4. 有返回值,有参数

    public int eat(String name,int money){
       return money;
    }

     

2 面向对象的特征

封装,继承,多态

2.1 封装(最终的效果是:私有属性,公有方法)

2.1.1 什么是封装

隐藏属性,方法或方法实现细节的过程

作用:隔离性,安全性

2.1.2 访问控制修饰符及其应用范围

 本类同包子类所有地方
private      
默认    
protected  
public

2.1.3 构造器/构造方法

方法名与类名相同

特点:没有返回值,连void都没有

作用:初始化成员变量(给成员变量赋初始值)

2.1.4 this关键字

自己的,本类的

  1. 修饰变量:通过.调用,全局变量,可以放在任意位置

  2. 修饰方法:通过.调用,成员方法,可以放在任意位置

  3. 修饰构造方法:直接使用,只能放在第一行

创建一个类时,会默认有一个有参和无参的构造方法。如果一旦书写构造方法,那么原本隐性无参的构造器将不存在

SUN公司建议:一个封装类至少包含两个构造方法(一个无参构造方法,一个包含所有参数的构造方法)

2.1.5 方法重载(Overload)

方法名相同,参数列表(参数的类型、个数、顺序)不同的方法

public void eat(){
   int money = 10;
   System.out.println(money);
}

public void eat(int money){
   String name;
}

public void eat(int money,String name){
   
}

2.2 继承

2.2.1 什么是继承

在一个类的基础上产生一个新类的过程,叫继承。原本的类叫父类(超类),新产生的类叫子类(派生类)

关键字:extends

public class Father(){
   String name;
   int age;
}
public class Son extends Father(){
   
}
public class Demo{
   public static void main(String[] args) {
       Son s = new Son();
  }
}

2.2.2 特点

  1. 子类可以继承父类非私有的属性和方法

  2. 子类可以扩展自己的属性和方法

  3. 构造器不能继承,只能调用

  4. 子类可以重写父类的方法

  5. 可以声明父类,创建子类

    1. 声明什么类型,就能调用该类型的属性和方法

    2. 创建什么类型,就能调用该类型的属性和方法(前提是子类进行方法重写)

    3. 创建什么类型,就能强转为什么类型

2.2.3 向上转型和向下转型

向上转型(自转) Fathtr f = new Son()

向下转型 (强转)Son s = (Son)new Father()

2.2.4 子类访问控制修饰符大于父类访问控制修饰符

2.2.5 方法重写(Override)

方法签名(方法名和参数列表)相同,实现效果不同

2.5.6 super

父类的,超类的

  1. 修饰属性:在子类中调用父类属性,放在任意行都行

  2. 修饰方法:在子类中调用父类方法,放在任意行都性

  3. 修饰构造器:在子类中调用父类构造器,必须放在第一行

2.5.7 方法重写的规则

  1. 方法名相同,参数列表相同

  2. 返回值类型相同或者是其子类

  3. 子类访问控制修饰符权限不能严于父类

  4. 父类的静态方法不能被子类覆盖为非静态的方法,父类的非静态方法不能被子类覆盖为静态方法

  5. 子类可以定义与父类同名的静态方法,以便在子类中隐藏父亲的静态方法

  6. 父类的私有方法不能被子类覆盖

  7. 不能抛出比父类方法更多的异常正确使用方法的重写或覆盖

2.3 多态

2.3.1 什么是多态

同种事物,多种状态

2.3.2 多态的表现

  1. 使用父类作为形参

  2. 使用父类组为方法的返回值

  3. 方法重载和方法重写

2.3.3 工厂模式

2.3.3.1 什么是工厂模式

顾名思义就是一个工厂,只不过这个工厂是用来创建对象的。

2.3.3.2 工厂模式的优点
  1. 对客户隐藏创建对象的细节

  2. 清洗客户端,客户端获取对象不需要那么多选择语句

  3. 客户类只知道哪种类型的对象被创建了,而不必知道哪个具体的子类被初始化了

2.4 抽象

2.4.1 抽象方法

由abstract修饰的方法就是抽象方法

特点:没有方法体

抽象方法的作用:是被子类重写

2.4.2 抽象类

由abstract修饰的类就是抽象类

特点:无法实例化自己

2.4.3 抽象方法与抽象类的关系

有抽象方法的类一定输抽象类;抽象类不一定包含抽象方法

注意:如果父类是抽象的,子类实现部分父类的抽象方法,此时子类也一定要抽象(不常用);常用的方式是:父类抽象,子类实现所有方法

2.4.4 抽象类的特点

  1. 不能实例化自己

  2. 抽象类和抽象方法都需要用abstract修饰

  3. 抽象方法必须在抽象类中,抽象类中可以没有抽象方法

  4. 抽象类的子类如果重写所有抽象方法,那么就是一个具体的类

  5. 抽象类有构造方法,目的是让子类来调用构造方法初始化

2.5 接口(你定规范,我来实现)

2.5.1 什么是接口

一个类中所有的方法都是抽象的,那么该类就是一个特殊的抽象类即接口

2.5.2 关键字

interface

2.5.3 特点

没有方法体,其里面所有抽象方法都可以省略abstract

不能实例化自己,只能实例化其实现子类

2.5.4 接口的实现(implements)

接口满足了部分子类的需求:可以多实现,没有先后顺序

如果一个类有继承、有实现,一定先继承后实现

抽象类和接口

相同点
  1. 代表系统的抽象层

  2. 都不能被实例化

  3. 都能包含抽象方法

不同点
  1. 在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法

  2. 一个类只能继承一个直接的父类,但可以实现多个接口

使用原则

  1. 接口做系统与外界交互的窗口

  2. 接口本身一旦制定,就不允许随意修改

  3. 抽象类可以完成部分功能实现,还有部分功能可作为系统的扩展点

2.6 static:静态的

  1. 修饰属性:静态属性,可以直接类名.属性名调用,也可以实例化后调用

  2. 修饰方法:静态方法,可以直接类名.属性名调用,也可以实例化后调用

  3. 修饰代码块:静态代码块,直接加载到内存中

  4.  

posted @ 2021-11-18 17:12  ybybyb  阅读(40)  评论(0)    收藏  举报