Java基础-封装、继承、多态

关于Java的三大特性,封装,继承,多态。

封装

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装要对类成员变量进行私有(private),并暴露修改和获取方法(setAttr、getAttr)。

  • 封装可以隐藏内部程序实现的细节。(实际上我们在使用轮子时并不需要过度关注实现)
  • 良好的封装能够减少代码之间的耦合度。
public class Animals {

    /*
     * 将对象中的成员变量进行私有化,外部程序是无法访问的。
     * 但是对外提供了访问的方式,就是set和get方法。
     *
     * 对于该类的实体对象,外部程序只有赋值和获取值的权限,
     * 是无法对内部进行修改,因此我们还可以在内部进行一些逻辑上的判断等,来完成我们业务上的需要。
     */

    /*成员变量私有*/
    private  String name;
    private  Integer age;

    /*暴露set、get方法*/
    public void setAge(int age) {
        this.age = age;
    }

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

    public Integer getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

}

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。当然,如果在父类中拥有私有属性(private修饰),则子类是不能被继承的。

访问修饰符可以看这位大佬写的博客 Java中private、protected、public和default的区别 - jingmengxintang - 博客园

继承只支持单继承(可以使用接口达到多实现的目的),但允许多层继承。子类继承父类的属性和方法(非私有的),子类可以拥有自己的属性和方法,子类可以重写覆盖父类的方法(这里引申出重写和重载)。

  • 提高代码复用性。
  • 便于维护管理。
public class Animals {

    /*父类*/

    /*成员变量保护*/
    protected  String name;
    protected  Integer age;

    /*暴露set、get方法*/
    public void setAge(int age) {
        this.age = age;
    }

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

    public Integer getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void active(){

    }

    public void sleep(){

    }
}
public class Dog extends Animals{

    /*继承父类的属性和方法*/

    /* 根据需要重写或重载方法*/


    @Override
    public void sleep() {
        String str =  "'override'";
        System.out.print(str);
    }

    /**
     * 重载规则:
     *
     * 1,被重载的方法必须改变参数列表(参数个数或者类型不一样)。
     *
     * 2,被重载的方法可以改变返回类型。
     *
     * 3,被重载的方法可以改变访问修饰符。
     * @param i
     */

    public void active(int i) {
        super.active();
    }

    /* 调用super 和this*/

    /**
     * super()关键字的用法
     * 1,子类的成员方法中,访问父类的成员变量。
     * 2,子类的成员方法中,访问父类的成员方法。
     * 3,子类的构造方法中,访问父类的构造方法。
     *
     *this关键字用法:
     * 1,本类成员方法中,访问本类的成员变量。
     * 2,本类成员方法中,访问本类的另一个成员方法。
     * 3,本类的构造方法中,访问本类的另一个构造方法。
     *
     */

    public void use(){
        super.active(); /*父类方法*/
        this.active();/*调用父类*/
        this.active(10);/*重载的方法*/
        this.sleep(); /*重写*/
    }
}

多态

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

​ 多态具有 消除类型之间的耦合关系,实现低耦合;增加类的灵活性、可扩充性、可替换性的特点。

多态的体现主要在

  • 继承

  • 父类引用指向子类

  • 重写

注意:在多态中

  • 方法的调用 :编译看左边,运行看右边。

  • 变量的调用:编译看左边,运行看左边。

格式:父类名称 对象名 = new 子类名称();

含义:右侧创建一个子类对象,把它当作父类来使用。

注意:向上转型一定是安全的。

缺点:一旦向上转型,子类中原本特有的方法就不能再被调用了。

 Animals dog = new Dog();

引申:向下转型

向下转型是一个还原动作

Dog dog = (Dog) dog;

可以理解为强转,但要注意类之间的差异(如将数组强转为字符串就会报异常,虽然所有的类源头都继承于基类Object)

 强制类型转换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值