面向对象编程(三)

一、继承(Inheritance)

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

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

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

4、特性

  1. 子类拥有父类非 private 的属性、方法。
  2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。
  4. Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

构造器

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super关键字调用父类的构造器并配以适当的参数列表。 如果父类构造器没有参数,则在子类的构造器中不需要使用 super关键字调用父类构造器,系统会自动调用父类的无参构造器。

 继承关键字

  • 继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

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

5、方法的重写(Override)

方法重写又称 方法覆盖 。 方法的重写是指两个方法的返回值、方法名、参数的类型和个数相同 (子类重写父类的方法)。 方法的重写,不能发生在同类中,只能发生在子类中。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

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,...()
接口与抽象类的区别:

基本语法区别

Java中接口和抽象类的定义语法分别为interface与abstract关键字。

抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

a、抽象类不能被实例化只能被继承;

b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前);

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

d、JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

如下例子所示:

public interface Person{
  public static final int a=10;
  //JDK1.8
    default void sayHello(){
        System.out.println("Hello World");
    }
    public void say();
}
public abstract class Person{
  public abstract void say();
  public void eat(){};
}

如上述代码所示:

接口只能是功能的定义,而抽象类既可以为功能的定义也可以为功能的实现。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值