Java面向对象(三)

一、继承(Inheritance)

1、概念:生活中儿子继承父亲的资产,而程序中是类与类之间特征和行为的一种赠与或获得。

2、格式:class 子类 extends 父类();

3、作用:提高代码的复用性,还提高了代码的可扩展性。

4、特性:单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类。产生继承后,子类可以父类的属性和行为,也可以定义子类特有的属性与方法。

注:(1)类中的构造方法,只负责创建本类对象,不可继承。private修饰的属性和方法,只有本类可见。父类与子类不在同一个package中时,default修饰的属性和方法,仅同包可见。如果定义一个类是没有调用extends,那么它的父类是java.lang.Object

5、方法的重写(Override)

概念:当我们所写的子类当中需要有一个方法,而这个方法的名字恰好与父类当中的方法重名,而且此时父类当中的这个方法并不能满足子类的需要,此时我们就需要对这个方法进行重写。

原则:方法名称,参数列表,返回值类型必须与父类相同。子类访问修饰符>=父类访问修饰符

执行:子类覆盖父类方法后,调用时优先执行子类覆盖后的方法。

重写与重载的区别: (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不 同或数量相同而类型和次序不同,则称为方法的重载(Overloading) (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个 数与类型一样,返回值也一样的方法,就称为重写(Overriding) (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多 态性表现。

6、关键字

(1)super

概念:当在子类对象中,子类想访问父类的东西,可以使用“super.”的方式访问。父子类的同名属性不存在覆盖关系,两块空间同时存在(子类覆盖父类属性),需使用不同的前缀进行访问。

用法;(1)子类方法中  super.父类属性,super.父类方法();(2)子类构造方法中    super(),  super(参数)

 this与super的区别:

(1)代表的事物不同
  super代表的是⽗类空间的引⽤
  this 代表的是所属函数的调⽤者对象
(2)使⽤前提不同
 super 必须要有继承关系才能使⽤
 this 不需要继承关系也能使⽤
(3)调⽤的构造函数不同
 super :调⽤⽗类的构造函数
 this :调⽤所属类的构造函数

注:当子类构造中使用了this()或this(实参),不可再同时书写super()或super(实参),会由this()指向的构造方法完成super()的调用。

(2)final

①final修饰变量不能被重新赋值。

class Math{
     public final double PI=3.1415926;
}


② final 修饰方法不可被子类重写,但可以被重载。

final void student (){
}


③ final修饰类,修饰的类不能被继承

final class FontDialog{
}


④ 可以修饰 类,方法,属性,变量。
二、多态

概念:父类引用指向子类对象,从而产生多种形态。二者具有直接或间接的继承关系时,父类引用可指向对象,即形成多态。多态与方法有关,与属性无关。

格式:父类类型 变量名=new 子类类型();

条件:继承,方法重写,父类引用指向子类对象

父类引用指向子类对象后用该父类引用调用子类重写的方法。

作用:屏蔽子类间的差距,灵活,耦合度低。

应用:1)使用父类作为方法形参实现多态,使方法参数的类型更为宽泛 调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象

2) 使用父类作为方法返回值实现多态,使方法可以返回子类对象 调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象。

对象的类型转换:

1)向上转型:父类的引用指向子类的对象。

Father f=new Son():
Son son=new Son();
Father f=(Father)son;

以上两种方法创建上转型对象,其中San是Father的子类,f就是上转型对象。

注:仅可调用父类所声明的属性和方法。

向下转型:子类对象指向父类引用。

注:只有转换回子类真实类型,才可调用子类独有的属性和方法。

三、抽象类

抽象类的成员变量,成员方法,构造方法与普通类一致。抽象类有 abstract 修饰。抽象类不可以实例化对象。抽象类可以有抽象方法。抽象方法不能有方法体,只能在非抽象子类中实现。
抽象方法:abstract 修饰的方法是抽象方法。抽象方法没有实现,需要在子类中实现。

public abstract void test();

抽象类可以没有抽象方法,但是有抽象方法的一定是抽象类。一个类只能继承一个抽象类
四、接口

接口是一种抽象类型,是抽象方法的集合,以 interface 声明。一个类可以实现多个接口。
接口不是类。类描述对象的属性和行为,接口包含类需要实现的方法。接口方法默认是 public abstract,变量默认是 public static final。

特点:接口不能实例化对象。接口没有构造函数。接口中都是抽象方法。接口不能包含成员变量,除了被 static final 修饰的变量。接口被类 实现(implement),一个类可以实现多个接口。
语法:

class 子类 extends 父类 implements 接口1,接口2,...()

接口与抽象类的区别:

(1)一个类 只能继承一个抽象类,但是可以实现多个接口。
(2)抽象类中成员变量可以是各种类型的;接口中变量只能是 public static final 。
(3)抽象类中的非抽象方法 可以是 private default protected public;接口中只能是 default 的方法。非抽象方法有方法体。
(4)java 8 之前,接口不能有 static 静态方法;java 8 之后,接口中可以有 static 静态方法。抽象类可以有 static 静态方法。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值