面向对象(2)

一、 继承

1.1背景
1、目的:就是为了让代码能够很好的被重复利用
2、概念:父类(基类、超类),子类(派生类)
3、关键字:extends(扩展)

1.2语法规则
1、使用格式:

class  子类 extends 父类{
}

1)使用extends指定父类
2)Java是单继承,一个类只能继承一个父类(而C++/Phython等语言支持多继承)
3)子类会继承父类的所有属性和方法,无论是public还是private,但是只有public能够被使用(访问)
4)子类实例中也包含着父类的实例,可以使用super关键字的到父类引用的实例

注意:继承原则上不能超过三层

1.3 子类和父类的构造函数情况

构造方法(构造函数)是一类特殊的方法,用于创建对象时初始化对象中新的属性值。

语法格式:
[访问符] 类名 ([参数列表]){
初始化语句}
(1)方法名和类名相同
(2)方法名前面没有返回类型的声明
(3)方法中不能使用return语句返回一个值

类的构造方法有两种:

默认的构造方法:不带参数的构造方法,可以有语句也可以没有语句。
非默认构造方法:是指带参数的构造方法

继承中的构造方法:
每个类都有构造方法,如果不显示的创建构造方法,那么编译器就会给这个类自动生成一个没有参数的构造方法。
在继承中当父类里面没有写构造方法的时候,就会被自动生成了没有参数版本的构造方法,此时如果直接 new 子类实例,就会调用到刚才这没有参数的构造方法。
当父类有构造方法的时候,并且这个构造方法带参数的时候,编译器就不会自动生成没有参数的构造方法了,此时再创建子类实例,就需要显示的调用父类的构造方法,并且进行传参

1.4this、super和final

1、this:

a)代指对象本身
b)this访问本类的对象变量和成员方法,代表当前对象
c)在构造方法中使用this代表创建的对象

2、super:

a)在子类成员方法中,访问父类的成员变量
b)在子类成员方法中,访问父类的成员方法
c)在子类的构造方法中,访问父类的构造方法

this和super的区别:super是用来访问父类的内容,而this关键字在不同情况下访问的对象不同。
a)在本类的成员方法中,访问本类的成员变量。
b)在本类的成员方法中,访问本类的另一个成员方法
c)在本类的构造方法中,访问本类的另一个构造方法

3、final:
final关键字代表最终的不可修改的,具体修饰如下:

1)可以修饰类
格式:public final class
表示这个类不能被继承,其中的成员方法也不可以进行覆盖重写

2)可以修饰方法
格式:final 返回值 方法名(){}
表示该方法为最终方法不能被覆盖重写

3)可以修饰局部变量

第一种情况基本类型变量:表示变量当中的值不可以改变

第二种情况引用类型变量:变量中存放的地址不可以改变

4)可以修饰成员变量

a)当成员变量使用final修饰后不再有默认值,要进行下一步赋值
b)
1.5 继承中的执行顺序

1)父类的静态代码块优于子类的静态代码块
2)父类实例代码块和父类构造方法紧接执行
3)子类的实例代码块和构造方法紧接执行
4)第二次实例化对象时,父类和子类的静态代码块内容将不会被执行

二、组合

组合和继承相似,也是一种表达类之间关系的方式,也是能够达到代码重用的效果。通俗的说,就是一个类可以是其他类的成员。表现为:什么拥有什么、什么包含什么。

代码示例

public class Student {
 ...
}
public class Teacher {
 ...
}
public class School {
  public Student[] students;
  public Teacher[] teachers;
}

总的来说,继承和组合的目的都是为了让代码重用,提高代码的维护性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值