类的封装、继承和多态

@ ## 标题
(子类、父类、抽象类、祖宗类)(封装、继承、多态、getter、setter、构造方法

类的封装

定义

对一个类的属性进行私有化,并提供getter和setter方法。

package class_private;
public 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;
    }
}

好处

  • 安全
  • 规范
    封装后,类中的属性必须通过对象调用getter和setter方法进行操作,我们可以在getter和setter方法中添加一些条件对访问进行限制,起到安全和规范的作用。

JavaBean

  • 属性私有
  • 提供getter和setter方法
  • 必须有空参构造方法,有参构造方法视情况
package class_private;

public class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}

类的继承

定义

类A通过关键字extends继承类B,则A除了拥有自己的属性和方法外,还具有B中所有的属性和方法(除了B的构造方法不能被继承),使用时不需要通过B,因为继承就表示A也有了,所以能直接使用,但是只能使用B中非私有的(public、protect或者默认),私有private的虽然也会继承过来但是不能直接访问。

public class Dog extends Animal {
    public void call(){
        System.out.println("汪汪汪");
    }
}
public class DemoTest  {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("阿黄");
        dog.setAge(2);
        dog.call();
    }
}

继承的关系

一个类只能有一个父类,但是可以多级继承,比如类的父类再继承别的类;
一个类可以有多个子类

继承的好处

  • 提高代码的复用性
  • 具有现实意义,让代码之间搭建起一定的联系

重写

类A继承类B后,可以对类B中的方法进行重写。
什么是重写: 重写只发生在继承当中,是子类对父类中的方法进行重写,重写要求:

  • 权限修饰符必须>=父类中方法的权限修饰符
  • 返回值类型相同
  • 参数相同(类型、数量)
  • 方法体可以不同
  • 重写方法前必须带上@Override

继承的构造方法

当子类继承了父类后,那么在子类的构造方法中(子类所有的构造方法)会多出一个隐藏的调用父类构造方法的方法super(),我们也可以手动的给出super方法,也可以在里面传递参数来调用对应的父类构造方法,这个super方法可以让子类创建对象的时候先启动父类的构造方法,但是手动给出的super方法必须位于构造方法中的首行,不然会报错,因为子类对象的创建必须先调用父类的构造方法,把父类里面的内容继承过来才能去创建子类的对象。

public class Dog extends Animal {
    public Dog() {
        //隐藏super();
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    public void call(){
        System.out.println("汪汪汪");
    }
}

类的多态

多态的前提是继承,没有继承关系就不能说是多态。

格式

父类类型 对象名 = new 子类类型(参数);

编译和运行

  • 多态调用成员变量的特点:
    编译看左边父类,如果父类没有该属性,那么编译时期会报错;
    运行看左边父类,真正使用的是父类的变量;
    这里的编译指的是在idea编写代码的时候;
  • 多态调用方法的特点:
    编译时看左边父类,如果父类没有该属性,那么编译时候会报错,因为在编写代码的时候并不知道这个对象指的是子类,它仅仅进行语法检查,发现对象是父类类型,就会去父类的方法检查;
  • 解决方案:
    1. 把子类的方法在父类中用抽象方法写,然后子类继承时就必须要重写一次;
    2. 多态转型:向下转型
    2.1 格式:子类类型 变量名 = (子类类型) 父类变量名;
    2.2 使用新的变量名来调用子类的内容,使用父类变量名不可以,但是这里的父类变量名和子类变量名的值表示都是一样的,因为没有新new;

好处:提高代码的灵活性(参数是父类类型,那么可以传递任何的子类对象)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值