java面向对象OPP-三大特性

类和对象的创建

  1. 对象:具体的个体,如这辆车子,这个人,这只狗等,概括起来就是万物皆对象;
  2. 类:对象的抽象,如车子的抽象,所有车子的属性和行为,如小汽车都是4个轮子,能开动等。类是创建对象的模板,由属性和行为两部分组成;
  3. 类的创建:包括属性和方法,如下
java 复制代码
package oopDemo.test03;
//class-类的关键字,类名Car,类的创建
public class Car {
   public  int wheels=4;//类的属性以及赋值
   void run(){//类的方法
       System.out.println("能开动");
   }
}
  1. 类对象的创建,实例化后调用类方法;
java 复制代码
package oopDemo.test03;
//class-类的关键字
public class Application {
    static void main(String[] args) {
        //类对象的创建,类对象car01
        Car car01 = new Car();
        car01.run();
    }
}

构造器

  1. 构造器名必须和类名一致;
  2. 构造器没有返回值类型;
  3. 任何类都含有构造器。如果没有显式地定义类的构造器;
  4. 则系统会为该类提供一个默认的无参的构造器。一旦在类中显式地定义了构造器,系统就不会再为这个类提供默认的构造器了。
  5. 快捷键:Alt+insert,然后选择构造器,可选择无参或有参构造器;

  6. 构造器如下:注意下this关键字
java 复制代码
package oopDemo.test03;

public class Car {
   public  int wheels=4;//类的属性
   void run(){//类的方法
       System.out.println("能开动");
   }

    public Car(int wheels) {
        this.wheels = wheels;//this关键字,指向当前对象;super关键字,指向父级对象
        System.out.println("我是构造器");
    }
}

封装

  1. 隐藏对象的状态属性,使用private关键字定义声明属性私有,使用get或set方法设置、获取这个属性值;
  2. 高内聚,低耦合:类的内部数据操作都自己完成,仅暴露少量的方法给外部使用,如银行信息(所有信息以及运行不暴露给我们知道),你仅仅知道你自己的银行信息(只能操作自己的银行卡);
  3. 作用:①保护数据,提高数据安全性;②隐藏代码实现细节;③统一接口;④增强系统的可维护性;
  4. 参考代码以及注释:
java 复制代码
package oopDemo.test03;

public class Car {
   public  int wheels=4;//类的属性
    private String  CarlicenseCode;//设置成私有属性,达到封装
   void run(){//类的方法
       System.out.println("能开动");
   }
    public void SetCarlicenseCode(){//为私有属性设置get方法
       this.CarlicenseCode=CarlicenseCode;
    }
    public String getCarlicenseCode(){//为私有属性设置set方法
       return CarlicenseCode;
    }
    public Car(int wheels) {
        this.wheels = wheels;//this关键字,指向当前对象;super关键字,指向父级对象
        System.out.println("我是构造器");
    }
    private void test(){//方法也可私有,也是封装
        System.out.println("方法也私有了哦");
    }
}

继承

  1. extends关键字,单继承只能有一个父类;
  2. 父类可以有多个子类,如汽车---》大众汽车;汽车---》奔驰汽车;汽车---》宝马汽车;
  3. 他们的超级父类是Object
java 复制代码
package oopDemo.test03;

public class BMWCar extends Car{
    public BMWCar(int wheels) {
        super(wheels);
    }
}

方法的重写--方法可以重写,属性不可

  1. 子类继承父类时,将父类的方法重写;
  2. 关键字: @Override
  3. 快捷键:Alt+insert,然后选择方法重写,然后选择需要重写的方法。具体操作可见构造器;
  4. 注意事项:①方法名必须和父类相同;②参数列表也要相同;③修饰符可以扩大不可以缩小;④抛出的异常范围可以缩小不可以扩大-----注意和重载的区别
java 复制代码
package oopDemo.test03;

public class BMWCar extends Car{

    public BMWCar(int wheels) {
        super(wheels);
    }

    @Override //父类方法重写
    void run() {
        super.run();
    }
}

多态

  1. 一种事物的多种形态;
  2. 存在条件:①有继承关系;②子类重写父类方法;③父类引用指向子类对象;
java 复制代码
package oopDemo.test03;

public class Application {
    static void main(String[] args) {
        //car01和car02都是具体对象,一个左侧是Car类实例化,一个是BMWCar,这就是多态
        Car car01 = new BMWCar(4);
        BMWCar car02 = new BMWCar(4);
        car01.run();
    }
}

抽象

  1. abstract关键字,包括抽象类和抽象方法,就是类的抽象,具体由子类实现,抽象方法也就抽象类的子类中的方法实现
java 复制代码
package oopDemo.Test;
//抽象类--关键字abstract
public abstract class AbstractDemo01 {
    public  abstract void dosomething();//抽象方法:没有方法体
    public void test(){  //这个是普通方法,有方法提
        System.out.println("----");
    }
}
  1. 抽象类的子类,去实现抽象类
java 复制代码
package oopDemo.Test;
//抽象类的方法必须重写,去实现他父类的方法
public class A extends AbstractDemo01{
    @Override
    public void dosomething() {
        System.out.println("重写的方法");
    }
}

接口

  1. 接口就是约束就是规范。
  2. 关键字interface,如接口代码
java 复制代码
package oopDemo.test03;
//关键字interface
public interface TimerService {
    void timer();//没有方法体
}
  1. 接口实现,关键字implements
java 复制代码
package oopDemo.test03;
//关键字implements, TimerService--这个是接口,这个UserServiceImpl是接口实现
public class UserServiceImpl implements TimerService{
    @Override
    public void timer() {//接口需要方法重写
        System.out.println("实现接口timer方法");
    }
}
  1. 接口可以多个继承,使用逗号隔开
java 复制代码
public class UserServiceImpl implements UserService,TimerService{ }
相关推荐
云和数据.ChenGuang25 分钟前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
niucloud-admin37 分钟前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
专注仿真1 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
霸道流氓气质1 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
jimy11 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
captain3762 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
呆呆虫122 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
wflynn2 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
心中有你02142 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
2601_967980112 小时前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包