(八).封装、继承、和多态

一、封装

1.封装

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而只能通过类的方法来实现对隐藏信息的操作和访问。

封装的实现步骤:

普通方法也可以修改属性的值,但从编程规范上而言,才用getter/setter方法

2.访问修饰符

private 只能在本类中访问

protected 能在本类 一个包 子类中访问

没有修饰符 在本类 一个包中访问

public 任何地方都能访问

3.this关键字

this 关键字,代表当前对象。

this.属性   操作当前对象的属性

this.方法   操作当前对象的方法

二、继承

1.继承的概念

继承是类与类的一种关系,是一种"is a"的关系

注:Java中的继承是单继承(也就是一个类只有一个父类)

2.继承的好处

子类拥有父类的所有属性和方法(当然,属性和方法的修饰符不能是private,private的属性和方法是不能继承的)

实现代码复用

3.语法规则

class 子类 extends 父类

例:class Dog extends Animal{

......

}

4.java中的方法重写

如子类对继承父类的方法不满意是可以重写父类继承的方法的,当调用时就会优先调用子类的方法。

重写方法的规则: 1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。 2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。如果在子类中写了一个只有返回类型不同的函数,将不是重写,且会报错

5.java中的继承初始化顺序

(1)优先创建父类对象,然后创建子类对象,即先初始化父类,再初始化子类

(2)属性的初始化顺序:

父类的属性初始化->父类构造函数初始化->子类的属性初始化->子类构造函数初始化

6.java中final的使用

final关键字: 表示“最终的”,即不可修改。

final可以修饰类、方法、属性和变量

6.1、修饰类:不允许被继承

6.2、修饰方法:不允许被重写

6.3、修饰属性:则该属性不会进行隐式初始化(不会自动初始化),需要手动初始化或者在构造方法中初始化 (但二者只能选一,即只能初始化一次后便不能更改)

7.java中的super的使用

surper.属性  和  surper.方法是访问父类的属性和方法

final 关键字定义的类不可继承,定义的函数不可重写

 

super关键字的应用:

7.1.子类的构造过程中必须调用其父类的构造方法

7.2.如果子类的构造方法没有显示调用父类的构造方法,则系统会默认调用父类的无参构造方法。

7.3.如果显示的调用构造方法,必须在子类的构造方法的第一行,super()。

7.4.如果子类的构造方法中既没有显示调用父类的构造方法,父类又没有无参的构造方法,则编

三、多态

1.多态: 指的是对象的多种形态,主要分为 引用多态 、方法多态

继承是多态的实现基础,别忘了子父类要有继承关系. 多态特性:

1.1、引用多态

(1)父类引用可以指向本类对象 Animal obj1 = new Animal();

(2) 父类的引用指向子类的对象;

     例如:List<T> list = new ArrayList<>();

1.2、方法多态

(1)创建本类对象时,调用的方法为本类方法;

(2)父类引用指向子类的对象时,只能调用继承或重写的方法,不能调用子类独有的方法

2.多态中的引用类型转换

1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。

如:Dog dog=new Dog();Animal animal=dog;//正确,自动类型提升,向上类型转换

2.向下类型转换(强制类型转换),是大类型到小类型的转换(存在风险,溢出)

如:Dog dog1=(Dog)animal;//向下类型转换

3.instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。

如: Dog dog=new Dog(); Animal animal=dog; Cat cat=(Cat)animal;//编译时不会出错(按Cat类型进行编译),但运行时会报错,因为它开辟的是Dog类型的空间,而(无法将引用类型进行转换)无法将dog对象转换成Cat类型,并且此方法对程序的安全性有影响。

此时应该利用instanceof和if语句结合使用,进行验证,以保证程序的安全性,

如:

if(animal instanceof Cat){

//判断animal类中是否包含Cat类型的元素,若包含则进行转换,instanceof返回值为布尔类型 Cat cat=(Cat)animal;

}else{

          System.out.println("无法进行类型转换");

}

3.java中的抽象类

抽象类的终极奥义是:抽取类的共同特性,然后各个类,有不同的实现。

比如:要创建几个类,这些类都有一样的方法,比如都是需要求周长和体积,这就能把求周长和体积的方法抽取出来到抽象类里。

然后类再继承抽象类来分别实现这个方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值