封装继承多态接口

封装

定义:将一个类中的成员变量私有化,对该类提供一些公共的访问方法

关键字private:私有的/不能被访问的

被private修饰的成员变量/成员方法只能在本类中访问

关键字this:代表的是当前类的对象

一个标准类写法:

成员变量:全部私有化

构造方法

提供公共的访问的成员方法

形式参数的问题:

  1. 形式参数如果是基本数据类型:形式参数的改变对实际参数没有影响;
  2. 形式参数如果是引用数据类型:形式参数的改变,会直接影响实际参数

 

 

 

 

 

继承

定义:就是扩展已有类的功能,在继承中分子类和父类,父类有时候也称为超类(super类),子类有时称为派生类

 

基本语法格式: class 子类 extends 父类{}

 

特点:

1.在java中,只支持单继承,不支持多继承

例:

class son extends father ,grandfather{}(错误)

2.但可以支持多层继承

例:

class father extends grandfather{}

class son extends father{} (正确)

 

优点:

  1. 提高代码的复用性;
  2. 后期利于维护;
  3. 继承关系是多态的前提.

 

注意事项:

  1. 子类继承父类只能继承父类的非私有化的(成员变量或成员方法),要使用私有化的必须通过公共的访问方法;
  2. 子类不能继承父类的构造方法,只能通过super间接的去访问父类的构造方法;
  3. 不要为了部分的功能去使用继承,如果A类是B类的一种,并且体现的是is a 的关系,那么就使用继承
  4. 子类继承父类时,变量名的问题:

如果子类继承父类时,子类的变量名和父类名称一致时:(就近原则)

  1. 现在子类的局部位置找;
  2. 再在子类的成员位置找;
  3. 父类的成员位置找;
  4. 如果都没有,那么报错.
  1. 子类继承父类时,子类的所有构造方法,都默认访问父类的构造方法(先让父类初始化,再让子类初始化)
  2. 子类继承父类时,当成员方法名相同的情况下,如果子类的有输出子类的成员方法,如果没有看父类,父类有,则输出

 

关键字:

this:代表当前类的对象(子类的空间标识)

super:代表父类的对象(父类的空间标识)

应用场景:

成员变量:

this.成员变量

super.成员变量

构造方法:

无参:

this();

super();

有参:

this(参数);

super(参数);

 

方法重写:override

定义:当子类出现和父类一模一样的方法声明时,子类的方法会重写(覆盖,复写)父类的方法,调用子类的方法

相近词:overload方法重载:

定义:一个类中,有多个方法名相同的方法,但参数列表不同,与返回值无关(只看方法名和参数列表)

  1. 参数列表不同;
  2. 参数类型不同.

 

例题:

子类继承父类时,如果父类的无参构造没有给出那么会发生什么?

代码报错

解决方法:

  1. 手动给出父类的无参构造;
  2. 在子类的构造方法中,间接通过super(有参)方法调用父类的有参构造,其中super的有参构造的参数只能随便给;
  3. 在子类的无参构造方法中,先去间接的访问本类中的有参构造方法[this(参数)];然后再通过本类中有参构造方法间接的访问父类中有参构造方法[super(参数)].

第三种方法,子类构造方法访问父类的构造方法,但是子类的无参构造方法,访问的是子类的有参构造方法

 

类的初始化:

  1. 初始化父类;
  2. 初始化子类.

 

多态

定义:某个事物在不同时刻体现出的状态

多态意味着一个对象有着多种形态,可以在特定的情况下,表现出不同的状态,从而对应着不同的属性和方法.通过程序来说:多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果

多态的前提条件:

  1. 必须有继承关系;
  2. 必须方法重写;
  3. 必须有父类引用指向子类对象:   向上转型

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

将子类对象当作父类类型

--->父类类型变量引用不同的子类对象

多态的成员访问特点:

  1. 成员变量的访问特点:

编译看左,运行看左

  1. 成员方法的访问特点:

(1)非静态的成员方法:

编译看左,运行看右

(2)静态的成员方法:

编译看左,运行看左

  1. 构造方法:--->作用:给对象进行初始化

优点:

  1. 提高代码的扩展性;
  2. 提高代码的维护性.

弊端:

不能访问子类的特有功能

解决方法:

  1. 直接创建子类的引用对象;
  2. 向上转型--->即对父类对象进行强制类型转换

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

 

在java中由于继承和向上转型,子类可以非常自然的转换成父类,但父类转换成子类则需要强制类型转换,因为子类比父类拥有更多的属性,更多的功能,所以子类需要强转--->由此可以得出一个结论,大转小可以自动转换,小转大需要强制类型转换

 

 

接口

定义:是抽象方法的集合,是一个特殊的类

格式: interface 接口名{}

class 类名 implements(实现) 接口名{}

类和接口是一种实现的关系

命名规则: 实现类--->接口名+impl

注意:

1.接口不能实例化;

2.接口的实现类不能是抽象类,接口本身不能实例化,需要通过子实现类来实例化.如果它的实现类也是抽象类的话,那么没有意义;--->扩展:如果类是抽象类的话,可以不实现接口中的所有方法;如果类不是抽象方法,必须实现接口中所有的方法

3.接口的实现类是具体类的话:

书写格式: 接口名 对象名=new 子实现类名(接口多态)--->推荐使用

成员特点:

  1. 成员变量:--->即全局变量

存在默认的修饰符:public static final

  1. 构造方法:

接口中没有构造方法

  1. 成员方法:--->即抽象方法

默认修饰符public abstract

扩展:

类,接口的关系的区别:

  1. 类与类的关系:

extends 继承关系,单继承

  1. 类与接口的关系:

implements:实现关系,并且可以多继承,

例:

class 类名 implements 接口名1,接口名2{}

  1. 接口与接口的关系:

extends 关系:可以是单继承,可以是多继承, 例:

interface 接口名1 extends 接口名2,接口名3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值