Java学习10.11

今日学习内容:

一、继承

二、多态

三、接口与抽象类

 

一、继承:

1.

class 子类名 extends 父类名{

……

}

2.

父类(parent class)

超类(super class)

基类(base class)

例: 

子类自动拥有父类声明为public和protected的成员,这就是继承特性的体现之一。

class Animal {

}     

class Lion extends Animal {

}

3.继承条件下类的访问权限

public 外界可自由访问
private  外界不可访问
protected 同一包中的子类都可以访问,另一包中的子类(派生于同一个父类)也可以访问
default 如果不指明任何权限,则默认同一包中的类可以访问

 

 

 

 

 

4.不允许继承的类

final class 类名 {

}

以final声明的方法不允许覆盖。 以final声明的变量不允许更改。 利用final,可以设计出一种特殊的“只读” 的“不可变类”。此对象的属性不可改,而且也无法从此类派生出新子类。

 

5.子类与父类方法间的关系

由于Java并未对子类方法的命名做过多的限制,因此,子类与父类各自定义的方法之间,可以出现以下三种情况:

扩充(Extends) 子类定义的方法父类没有同名
覆盖/重写(Override) 子类父类定义了完全一样的方法
重载(Overloads) 子类有父类的同名方法,但两者的参数类型或参数数目不一样

 

 

 

 

6.“方法覆盖(override)”的要点

方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)!

 

7.Java“方法覆盖”的语法规则

(1)覆盖方法的允许访问范围不能小于原方法。

(2)覆盖方法所抛出的异常不能比原方法更多。

(3)声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。

(4)不能覆盖静态方法。

 

二、多态

1.

多态的最本质特征就是父类(或接口)变量可以引用子类(或实现了接口的类)对象。换句话说:子类对象可以被当成基类对象使用!

2.Java中子类与基类变量间的赋值

子类对象可以直接赋给基类变量。 基类对象要赋给子类对象变量,必须执行类型转换,

其语法是: 子类对象变量=(子类名)基类对象名; 也不能乱转换。

如果类型转换失败Java会抛出以下这种异常: ClassCastException.

三、抽象和接口

 

1.抽象类和抽象方法

有abstract修饰的类称为“抽象类”,它只定义了什么方法应该存在,不能创建对象,必须派生出一个子类,并在子类中实现其未实现的方法之后,才能使用new关键字创建对象。

在方法前加上abstract就形成抽象方法,只有方法声明,没有实现代码.

一个抽象类中可以包含非抽象方法和成员变量。包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法.

从抽象类继承的子类必须实现父类的所有抽象方法,否则,它仍然是抽象类.

 

2.抽象类的三种“类型”

(1)直接定义了一个抽象方法

(2)继承了一个抽象父类,但没有完全实现父类包含的抽象方法

(3)实现了一个接口,但没有完全实现此接口所包容的抽象方法。

 

3.使用抽象类

抽象类不能创建对象,一般用它来引用子类对象.

抽象类  抽象类变量 = new  派生自抽象类的具体子类();

 

4.Java中“接口”的语法特性

定义一个接口,采用关键字interface,实现一个接口,采用关键字implements

接口的成员函数自动成为public的,数据成员自动成为 static和final的。

如果接口不声明为public的,则自动变为package。

一个类可以同时实现多个接口。

 

5.接口的使用

接口类型  接口类型的变量=new 实现了接口的具体类型();

 

6.接口的扩充

可以通过继承接口来扩充已有接口,并形成一个新的接口。

interface OneInterface {

  void f1();

  }

interface TwoInterface extends OneInterface {

  void f2();

}

posted on 2020-10-11 12:31  桑榆非晚柠月如风  阅读(43)  评论(0编辑  收藏  举报