面向对象的三大特性

本文详细探讨了面向对象编程的三大特性:封装、继承和多态。封装强调隐藏内部细节,提供公共接口供外部使用,以实现高内聚、低耦合。继承允许子类继承父类的特性,简化代码并提高代码复用性,但可能导致紧密耦合。多态则是指同一对象在不同场景下有不同的形态,通过重写和接口实现,提高程序的扩展性。文章还涵盖了访问控制符、super关键字、final和抽象类、接口等概念。
摘要由CSDN通过智能技术生成

面向对象的三大特性

在这里插入图片描述

1.面向对象-封装(encapsulation)

装个盒子。 通过权限修饰符来确保当前的类、方法、变量在什么情况下可见的一种手段。

1.1 封装的作用含义

需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来. 这就是封装.

白话:该露的露,该藏的藏.

专业:程序设计追求"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用.

/*
    为了解决数据安全问题 :
        介绍一个关键字 private 私有的
        private是一个成员修饰符,只能修饰成员不能修饰局部
            访问权限,使用private修饰的成员被访问的权限为 : 只能在当前类中访问

        私有的属性在使用时,需要同时提供公共的访问方式
            设置器 setter : 为私有属性设置值
            访问器 getter : 获取私有属性的值

    注意 : 以后定义实体类中所有的属性,一般都设置为私有的,并同时提供一对公共的访问方式

    封装 :
        面向对象三大特性之一

        隐藏内部的实现细节,对外提供公共的访问方式
            封装是私有???,私有是封装
                封装不仅仅是私有,类,方法,属性私有化等都是封装具体的体现

        优点 :
           提高代码的安全性
           提高代码复用性,便于调用,便于修改内部代码,提高可维护性,可进行数据完整性检测,保证数据有效性

    Javabean : 实体类的统称,符合Javabean类型定义规范的类称之为Javabean
        1.类是公共的
        2.至少提供一个空构造
        3.私有的属性
        4.公共的访问方式
        5.重写toString和equals方法
 */

1.2 访问控制符,实现封装(封装的关键词)

关键字 同一个类 同一个包中 子类 所有类
private *****
default默认的 ***** *****
protected ***** ***** *****
public ***** ***** ***** *****

1.3 封装的使用细节

类的属性的处理:

一般使用private。 (除非本属性确定会让子类继承)

提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)

JavaBean对象
Javabean : 实体类的统称,符合Javabean类型定义规范的类称之为Javabean
        1.类是公共的
        2.至少提供一个空构造
        3.私有的属性
        4.公共的访问方式
          set+属性名首字母大写 -> 带参,无返回值
          get+属性名首字母大写-> 无参,有返回值    boolean   is+属性名首字母大写
        5.需要重写toString方法和equals方法
/*编写 Java 程序用于显示人的姓名和年龄。定义一个人类Person。 该类中应该有两个属性:
姓名 (name) 和年龄 (age) 。定义构造方法用来初始化数据成员。再定义显示(display())
 方法将姓名和年龄打印出来。在 main 方法中创建人类的实例然后将信息显示*/
public class PersonTest {
   
    public static void main(String[] args) {
   
        Person p = new Person();
        p.setName("科比");
        p.setAge(40);
        p.display();//调用功能  科比是姓名,年龄是40
    }
}
class Person{
   
    private String name;//属性
    private int age;//field

    public Person() {
   
    }//空构造
    //在带2个参数构造器初始化成员变量
    public Person(String name, int age) {
   
        this.name = name;
        this.age = age;
    }
    //显示姓名和年龄  这是功能method
    public void display(){
   
        System.out.println(name+"是姓名,年龄是"+age);
    }
    public String getName() {
   //访问器 getter : 获取私有属性的值
        return name;
    }
    public void setName(String name) {
   //设置器 setter : 为私有属性设置值
        this.name = name;
    }
    public int getAge() {
   
        return age;
    }
    public void setAge(int age) {
   
        this.age = age;
    }
}

拓展:MVC思想 (是一种分层思想,一种设计模式)

  • M:Model层(模型层) : 处理数据、业务,再把处理后的数据提供给视图层

  • V:View层(视图层): 为用户展示数据,是数据最直观的体现

  • C:Controller层(业务逻辑层):

    • 接收界面层的数据,对接受到的数据进行封装和类型转换

    • 调用模型层的服务进行业务逻辑的处理

    • 调用合适的视图去渲染数据。

2.面向对象-继承(extend, inheritance)

/*
    继承 :
        为什么要使用继承?
            为了提高代码的的复用性,将子类的共性定义在父类中

        如何使用继承?
            子类 extends 父类

        继承的作用:  extends  延续+扩展
            子类一旦继承父类,就有权使用父类的成员(属性和方法)
            子类中可以扩展子类独有的内容(重新定义,追加属性和方法)

    注意 :
        父类 : 子类的共性
        子类(实体类) : 一系列对象的共性

        一个父类可以定义多个子类
        但是一个子类只能继承一个父类--->单继承机制 : 优点:简单   缺点 : 不够灵活,不变后期维护

        子父类继承关系下 :
        父类|超类 : 被继承的类
        子类|派生类 : 继承父类的类
 */
public class Extends {
   
    public static void main(String[] args) {
   
        Teacher t = new Teacher("马云",49,"英语");
        t.teach();
        t.sleep();
    }
}
//父类
class Person{
   
    private String name;
    private int age;
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public int getAge() {
   
        return age;
    }
    public void setAge(int age) {
   
        this.age = age;
    }
    public void sleep(){
   
        System.out.println(age+name+"休息..");
    }
}
//子类教师类
class Teacher extends Person{
   

    private String subject;

    public Teacher() {
   //空构造
    }
    public Teacher(String name, int age, String subject) {
   //带参构造
        setName(name);
        setAge(age);
        this.subject = subject;
    }
    public void teach(){
   //功能
        System.out.println("传道授业...");
    }    
    public String getSubject() {
   
        return subject;
    }
    public void setSubject(String subject) {
   
        this.subject = subject;
    }
}
//子类 学生类
class Student extends Person{
   

    private String school;
    //空构造快捷键 : alt+insert->constructor->enter->tab->tab->enter
    public Student() {
   
    }
    //带参构造快捷键 : alt+insert->constructor->enter->shift+方向上下键选中初始化的属性->enter
    public Student(String name, int age, String school) {
   
        setName(name);
        setAge(age);
        this.school = school;
    }
    public void study(){
   
        System.out.println("好好学习...");
    }
    //设置器访问器
    //alt+insert->选择setter and getter 通过方向上下键 ->enter->shift+方向上下键选中属性->enter
    public String getSchool() {
   
        return school;
    }

    public void setSchool(String school) {
   
        this.school = school;
    }
}
public class ExtendsDog {
   
    public static void main(String[] args) {
   
        Dog d = new Dog("马云",3,"蓝色");
        d.eat();//3岁的马云在咔咔大吃...
        d.catchCat();//3蓝色马云抓猫...
        Cat c = new Cat("黑猫警长",9);
        c.eat();//9岁的黑猫警长在咔咔大吃...
        c.catchMouse();//9黑猫警长抓老鼠
        //Animal a = new Animal("这是动物父类",18);调用父类?因为实际只有空构造报错
        Animal a = new Animal();//new父类对象
        a.eat();//调用父类方法    0岁的null在咔咔大吃...
    }
}
class Animal{
   
    private String name;
    private int age;
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public int getAge() {
   
        return age;
    }
    public void setAge(int age) {
   
        this.age = age;
    }
    public void eat(){
   
        System.out.println(age+"岁的"+name+"在咔咔大吃...");
    }
}
class Dog extends Animal{
   
//    private String name;
//    private int age;
    private String color;
    public Dog() {
   
    }
    public Dog(String name, int age, String color) {
   
        setName(name);
        setAge(age);
        this.color = color;
    }
    public void catchCat(){
   
        System.out.println(getAge()+color+getName()+"抓猫...");
    }
    public String getColor() {
   
        return color;
    }
    public void setColor(String color
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值