0
点赞
收藏
分享

微信扫一扫

【 封装、继承、多态】

先峰老师 2022-04-21 阅读 71
java

封装

封装简单来说就是将代码进行私有,把数据保密起来,然后再将所有私有的数据进行get/set方法。这就是封装的整个过程,下面给大家代码进行理解理解。

//类  private:私有的
public class Student {
    private String name;//名字
    private int id;//学号
    private char sex;//性别
    private int age;//年龄

    //提供一些可以操作这个属性的方法!
    //提供一些public的get、set方法

    //get获得这个数据
    public String getName(){
        return this.name;
    }

    //set给这个数据设置值

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age<0||age>120) {
            this.age=3;
        }else {
        this.age = age;
        }
    }
}

知道了封装的过程,那我们为什么要进行封装呢?

  1. 提高了程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护增加

而且我们程序设计要追求“高内聚低耦合

继承

继承的概述

继承,就像一个父亲有两三个儿子一样,这三个儿子都有爸爸身上的一些特点,那就是继承了爸爸身上的某些地方。

继承关系的两个类,一个为子类(派生类),一个为父类(基类),使用extends来表示。我光说,大家也会很晕,我直接上代码给大家看看把

public class Student extends Person {

在上面的代码就是表示Student这个类是Person这个类的子类,Person类是Student类的父类。简单点说Person类是Student类的爸爸。既然是他的爸爸了应该有它的一些特征才对嘛。所以,Student类可以使用Person类中除了私有的数据其他都可以调用!

//学生 is 人:派生类,子类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person{

    //Ctrl + H
}

这个是学生类(派生类),里面什么方法都没有。

//在Java中所有的类,都默认之间或者间接继承object类。
//Person 人:父类
public class Person {

    //public 公有的
    //protected
    //defoult
    //private 私有的 不能被继承

    private int money =1_0000_0000;

    public void say(){
        System.out.println("说了一句话");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

这个是Person类(基类)上面有很多类,但是private私有的数据子类不能继承,其它都可以继承。

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();
    }
}

然后我有写了一个类来运行实例化Student对象,再继续调用say这个方法,大家都知道我的Student类中并没有写任何一个方法,但我可以进行调用say方法,这都因为它的爸爸拥有这个方法!

在这里插入图片描述

这是运行结果。

object类:

在Java中所有的类,都默认直间或者间接继承object类。

super:

1.super调用父类的构造方法,必须在构造方法的第一个

2.super必须只能出现在子类的方法或者构造方法中!

3.super和this不能同时调用构造方法!

Vs this:

代表的对象不同:

​ this: 本身调用者这个对象

​ super:只能在继承条件才可以使用

前提

​ this:没有继承也可以使用

​ super:只能在继承条件才可以使用

构造方法

​ this();本类的构造

​ super();父类的构造!

重写

1.方法名必须相同

2.参数列表必须相同

3.修饰符:范围可以扩大但不能缩小:public>Protected>Default>private

4.抛出异常:范围,可以被缩小,但不能扩大:ClassNotFoundException -->Exception(大)

重写,子类的方法和父类必须要一致:方法体不同!

为什么需要重写:

1.父类的功能,子类不一定需要,或者不一定满足!重之后就会延申到我们的多态方面。

多态

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

  2. 一个对象的数据类型是确定的,但可以指向对象的引用的类型有很多

  3. 多态存在的条件

    1. 有继承关系

    2. 子类重写父类方法

    3. 父类引用指向子类对象

      注意多态是方法的多态,属性没有多态性

      public class Person {
          public void run(){
              System.out.println("run");
          }
      }
      

      这是父类。

      public class Student extends Person {
          @Override//重写的注释
          public void run() {
              System.out.println("son");
          }
          public void eat(){
              System.out.println("ear");
          }
      }
      

      这是子类,我们可以发现,他们俩有同一个方法run但是他们输出的东西不一样。

      public class Application {
          public static void main(String[] args) {
            Student s1 = new Student();
              s1.run();
          }
      }
      

      我们写一个类,new个对象,运行run方法。我们看看会是那个结果。

在这里插入图片描述

很显然,我们执行了子类的方法,而父类的方法没有执行,所以在重写的时候,会覆盖掉父类的方法,运行出来会是不一样的结果,这就是多态的体现!

多态的注意事项

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

2.父类和子类,有联系,类型转换异常! ClassCastException!

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

不能重写的:

​ 1.static 方法,属于类,它不属于实例

​ 2.final 常量;

​ 3.private方法;

判断父子关系

1.通过instanceof可以判断定义的对象他们两个是否存在父类和子类的关系

2.判断完了之后如果存在父子关系,就可以进行强制类型转换

3.父类引用指向子类的对象,向上转型(直接转!)

4.把父类转为子类,向下转型,向下转型,(强制转换!)

5.方便方法的调用,减少重复的代码!简洁

抽象: 封装、继承、多态!

小结

可能我理解的封装、继承、多态,如果大家看到很模糊,还是不清楚,大家就去b站是去看视频学习把。我总结的知识都是看狂神说java总结出来的,大家有兴趣的话一起学习把!

举报

相关推荐

0 条评论