面向对象三大特性:封装、继承、多态

面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据

三大特征

  • 封装

  • 继承

  • 多态

封装(属性私有)

举个例子:创建一个类,名为EncapSulation

public class EncapSulation {
    private String name;
    private int id;
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name)  {
        this.name = name;
    }
}

main方法通过new一个对象来对类EncapSulation进行操作

public class Application {
    public static void main(String[] args) {
        EncapSulation encapsulation = new EncapSulation();
        EncapSulation.setName("张三");
    }
}

封装的作用(好处):

  1. 提高了代码的安全性

  2. 隐藏代码的实现细节

  3. 统一接口

  4. 系统可维护性增加了

快速设置get/set快捷键:

Alt + Insert

继承

如果定义一个父类Father,一个子类Son,那么子类Son就可以继承父类Father的非私有(private),非保护(protected)的属性和方法

关键词:extends

public class Son extends Father {
  
}

Java中类只有单继承,没有多继承:父类可以有多个子类,但子类不能有多个父类

快捷键:Ctrl + H 查看继承关系

多态

  • 同一个方法可以根据发送对象不同而采用多种不同的行为方式

  • 一个对象的实际类型是确定的, 但可以指向对象的引用类型有很多, 如Son是继承Father类的,那么创建对象时就可以有:

    Son son = new Son();// 创建一个子类对象son, 可以调用自己的或是Father类的方法
    Father father = new Son();// 创建一个父类对象father, 实际类型是子类Son的, 但不能调用子类Son独有的方法,可以调用子类重写父类的方法

    举个例子: 

     1.创建一个Son类并写入run方法

  • public class Son extends Father{
      public void run() {
        System.out.println("Sonrun方法结果输出");
      }
    }


    2.创建一个Father类并写入run方法

  • public calss Father {
      public void run() {
        System.out.println("Father的run方法结果输出");
      }
    }

     3.那么在启动类里(main方法) 

    public class Application {
        public static void main(String[] args) {
            Son son = new Son();// 创建一个子类对象son, 可以调用自己的或是Father类的方法
            Father father = new Son();// 创建一个父类对象father, 实际类型是子类Son的, 但不能调用子类Son独有的方法,可以调用子类重写父类的方法
            son.run();
            father.run();// 方法已经被重写
        }
    }

    4. 控制台输出结果

  • Son的run方法结果输出
    Son的run方法结果输出

  • 多态注意事项:

    1. 多态是方法的多态, 属性没有多态

    2. 必须要有联系, 如果没有联系, 就会出现转换异常!ClassCastException!

    3. 存在条件:继承关系, 方法需要重写, 父类引用指向子类对象! Father father = new Son();

    4. 有些修饰词不能被重写:

      • static 方法, 静态方法, 不属于实例

      • final 方法, 为常量

      • private 方法, 私有的,不能被重写

对象的强制转换 :instanceof

  1. 使用条件:父类引用指向子类的对象 Father father = new Son();

  2. 使用方法:

    • 把子类转换为父类,向上转型,可自动转换,但注意可能会丢失掉原本子类独有的方法

    • 把父类转换为子类,向下转型,强制转换,((子类型)对象).子类型方法;如((Son)son).run();

  3. 强制转换的作用:

    1.方便方法的调用,减少代码的重复!

    2.判断两个类是否有关系,能否编译通过:如定义三个类

 那么 

Person person = new Student();
System.out.println(person instanceof Student);// 输出为true
System.out.println(person instanceof Person);// 输出为true
System.out.println(person instanceof Object);// 输出为true
System.out.println(person instanceof Teacher);// 输出为False
System.out.println(person instanceof String);// 编译报错

最后还是要强调一下:面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据

感谢您的观看,如果本文有什么不正确的地方,请在下方评论区指出,谢谢

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个研到底考不考啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值