面向对象三个基本特征:继承、多态、封装

Java是一种面向对象的程序设计语言,面向对象就是在计算机设计程序过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。

什么是类?

类是一种相关属性和行为的集合。是抽象的。

什么是对象?

对象是一类事物的具体体现。即对象是类的一个实例。

一、 封装

封装的定义

编写一个类就是对数据和数据的操作封装,封装即是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。

封装的原则

将属性隐藏起来,若需要访问某个熟悉,提供公共方法对其访问。

封装的步骤

  1. 使用private关键字修饰成员变量。
  2. 对需要访问的成员变量,提供对应的getXxxsetXxx方法。
    public class Student {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

二、 继承

继承的定义

子类继承父类的特征和行为。提供继承信息的类被称为父类(基类),得到继承信息的类被称为子类(派生类)。

继承的特点

  1. 一个类只能继承一个父类,构造方法不能被继承。
  2. 支持多层继承。
  3. 父类private的属性和方法不能继承。

继承格式

class 父类 { }
class 子类 extends 父类 { }
super 和 this:
  super.成员变量---父类  super.成员方法  ---父类
  this.成员变量---本类  this.成员方法  ---本类
点击查看User类
public class User {

    private String name;

    private Integer sex;

    private Integer age;

    public String getName() {
        return "张三";
    }
}
点击查看Teacher类
public class Teacher extends User {

    /**
     * 教师工号
     */
    @Id
    private String teacherNo;

    /**
     * 入职时间
     */
    private LocalDateTime entryTime;
    
    @Override
    public String getName() {
        return "教师的姓名是:" + super.getName();
    }
}
点击查看Student类
public class Student extends User {

    /**
     * 学号
     */
    @Id
    private String StudentNo;

    /**
     * 专业
     */
    private String major;

    @Override
    public String getName() {
        return "学生的姓名是:" + super.getName();
    }
}

三、 多态

多态的定义

同一个行为具有多个不同表现形式或形态能力。

多态的优点

  • 消除类型之间耦合关系
  • 可扩充性
  • 可替换性
  • 接口性
  • 灵活性
  • 简化性

多态实现方式

方式一:重载与重写

  • 重载
    在一个类中,同一个方法名称,不同的参数类型及个数,可以完成不同功能。

    例:Student的全参构造器与无参构造器
    public class Student extends User {
    
        /**
         * 学号
         */
        @Id
        private String StudentNo;
    
        /**
         * 专业
         */
        private String major;
    
        public Student() {
        }
    
        public Student(String studentNo, String major) {
            StudentNo = studentNo;
            this.major = major;
        }
    }
    
  • 重写
    同一个方法名称,子类继承父类的方法,根据操作的子类不同,所完成的功能也不同。
    User user = new User();
    User student = new Student();
    User teacher = new Teacher();
    System.out.println(user.getName());
    System.out.println(student.getName());
    System.out.println(teacher.getName());
    
    输出结果:
    张三
    学生的姓名是:张三
    教师的姓名是:张三
    

方式二:抽象类和抽象方法

  • 抽象方法
    一个没有方法体的方法称为抽象方法。格式:修饰符 abstract 返回值类型 方法名(参数列表){}
  • 抽象类
    格式:abstract class 类名{}
    特点:
    • 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
    • 抽象类不可以实例化。
    • 抽象类的子类,可以是抽象类,也可以是具体类。如果子类为具体类,需要重写抽象类中所有抽象方法。

方式三:接口

定义:接口是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。接口无法被实例化,但是可以被实现. 一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口与类的区别

  1. 接口不能用于实例化对象。
  2. 接口没有构造方法
  3. 接口中所有的方法必须是抽象方法。
  4. 接口只能被类实现,不能被类继承。
  5. 接口支持多继承。
  6. 接口只能含 static 和final 变量。

接口与抽象类的区别

  1. 一个类只能继承一个抽象类, 而一个类可以实现多个接口。
  2. 抽象类中的方法可以有方法体, 接口中的方法必须是抽象方法,无方法体。
  3. 抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是 public static final 类型。
  4. 抽象类可以有静态代码块和静态方法,接口中不能含 静态static 修饰的方法。
    Java的抽象类和接口

final关键字

  • 表示最终的意思,可修饰类、成员方法、成员变量。
  • 修饰类:类不可被继承。
  • 修饰成员方法:方法不能被重写。
  • 修复成员变量:变量为常量,值不可以改变。

Java 面向对象的三大特征

posted @ 2023-01-10 14:51  Fogram  阅读(4)  评论(0编辑  收藏  举报