Java面向对象三大特性

一、面向对象是什么?

面向对象(Object Oriented,OO)是软件开发方法,一种编程范式。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、人工智能等领域。

Java是面向对象的高级编程语言,类和对象是Java程序的核心构成。 对象就是真实世界中的实体,对象与实体是一一对应的

:抽象的概念集合,是一个共性的产物,类中定义属性(特征)和方法(行为)。如:人类,具有共性的特征都有鼻子、眼睛、头发等;具有共性的行为有吃饭、睡觉、走路等

对象:对象是一种个性的表示,表示一个独立的个体,每个对象有自己独立的属性和行为,由此来区分不同的对象。

总结:类是对象的模板,对象是类的实例。

二、面向对象三大特性

面向对象三大特性为:继承封装多态3个核心特性

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类,继承关键字为extends

继承就是子类继承父类的特征和行为,使子类对象(实例)具有父类的实例域和方法,或从父类继承方法,使得子类具有父类相同的行为。

JAVA中的面向对象 java的面向对象特征_成员变量

虽然素草动物和肉食动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

/**
 * 动物类
 * @author 进击的java君
 * @date   2021-08-24
 */
public class Animal {
    //  共有特征
    public String name;
    //  共有行为
    public void eat(){
        System.out.println("动物都要吃饭!!");
    }
}
/**
 * 素食动物类
 * @author 进击的java君
 * @date   2021-08-24
 */
public class VegetarianAnimal extends Animal{
   
    	//	子类继承了父类,从而得到了父类相同的行为
    	//	@Override关键字,表示方法重写(如:若不写@Override,系统认为是子类定义的新方法,不会报错)
        @Override
        public void eat(){
            System.out.println("素食动物一般都吃草");
        }
}
/**
 * 肉食动物类
 * @author 进击的java君
 * @date   2021-08-24
 */
public class PredatorAnimal extends Animal {
    
    @Override
    public void eat(){
        System.out.println("肉食动物一般都吃肉");
    }
}

封装 核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。

使用 private 修饰符把成员变量设置为私有,防止外部程序直接随意调用或修改成员变量,然后对外提供 publicsetget 方法按照开发者的意愿(可以编写一些业务逻辑代码,虽然很少这样做)设置和获取成员变量的值。

Java 中主要有 private、protected、public 和 default访问权限 四种:

public 修饰符,具有最大的访问权限,可以访问任何一个在 CLASSPATH 下的类、接口、异常等。

protected修饰符,主要作用就是用来保护子类,子类可以访问这些成员变量和方法,其余类不可以。

default修饰符,主要是本包的类可以访问。

private 修饰符,访问权限仅限于本类内部,在实际开发过程中,大多数的成员变量和方法都是使用 private 修饰的。

JAVA中的面向对象 java的面向对象特征_java_02

/**
 * 动物类
 * @author 进击的java君
 * @date   2021-08-24
 */
public class Animal {
    // 使用 private 关键字把成员变量私有化
    private String name;
    
    // 对外提供访问、设置成员变量的 public 方法
    // 这样就可以按照我们自己的意愿来访问、设置成员变量
    // 而且也有助于在方法内部对数据有效性进行验证
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

JAVA中的面向对象 java的面向对象特征_多态_03

多态存在的三个必要条件:

  • 继承
  • 重写
  • 父类引用指向子类:Parent p =new Child();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pV2vUsnG-1629982117100)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20210824234603853.png)]

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

以下是一个多态实例的演示,详细说明请看注释:

public class Test {
    public static void main(String[] args) {
      show(new Cat());  // 以 Cat 对象调用 show 方法
      show(new Dog());  // 以 Dog 对象调用 show 方法
                
      Animal a = new Cat();  // 向上转型  
      a.eat();               // 调用的是 Cat 的 eat
      Cat c = (Cat)a;        // 向下转型  
      c.work();        // 调用的是 Cat 的 work
  }  
            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}

吃鱼 抓老鼠 吃骨头 看家 吃鱼 抓老鼠