java封装继承多态的理解_深入理解Java面向对象三大特性 封装 继承 多态

1.封装

封装的定义:

首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系

为什么需要封装:

封装符合面向对象设计原则的第一条:单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,他们只调用开放的接口,而不用去关心内部的实现

举例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

public class Human

{

private int age;

private String name;

public int getAge()

{

return age;

}

public void setAge( int age ) throws Exception

{

//封装age的检验逻辑,而不是暴露给每个调用者去处理

if( age > 120 )

{

throw new Exception( "Invalid value of age" );

}

this.age = age;

}

public String getName()

{

return name;

}

public void setName( String name )

{

this.name = name;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

2. 继承

Java的类可以分为三类:

类:使用class定义,没有抽象方法

抽象类:使用abstract class定义,可以有也可以没有抽象方法

接口:使用inerface定义,只能有抽象方法

在这三个类型之间存在如下关系:

类可以extends:类、抽象类(必须实现所有抽象方法),但只能extends一个,可以implements多个接口(必须实现所有接口方法)

抽象类可以extends:类,抽象类(可全部、部分、或者完全不实现父类抽象方法),可以implements多个接口(可全部、部分、或者完全不实现接口方法)

接口只能extends一个接口

继承以后子类可以得到什么:

子类拥有父类非private的属性和方法

子类可以添加自己的方法和属性,即对父类进行扩展

子类可以重新定义父类的方法,即多态里面的覆盖,后面会详述

关于构造函数:

构造函数不能被继承,子类可以通过super()显示调用父类的构造函数

创建子类时,编译器会自动调用父类的 无参构造函数

如果父类没有定义无参构造函数,子类必须在构造函数的第一行代码使用super()显示调用

类默认拥有无参构造函数,如果定义了其他有参构造函数,则无参函数失效,所以父类没有定义无参构造函数,不是指父类没有写无参构造函数。看下面的例子,父类为Human,子类为Programmer。

48304ba5e6f9fe08f3fa1abda7d326ab.png

public class Huma

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值