Java_接口、继承与多态

接口被用来建立类与类之间关联的标准。

类的继承

基本思想:基于某个父类进行扩展,得到一个新的子类。子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者重写父类中的某些方法。

在Java中使用extends关键字来标识两个类的继承关系。

Class Parent{

Parent(){

System.out.println("调用父类的Parent()构造方法");

}}

class SubParentextends Parent{

 SubParent(){

 System.out.println("调用子类的SubParent()构造方法”);

}}

public class Subroutine extends SubParent{

Subroutine(){

System.out.println("调用子类的Subroutine()构造方法“);}

 public static void main(String[] args){

 Subroutine s=new Subroutine();}

}

Object类

在Java中所有的类都直接或间接继承了java.lang.Object类。Object类是所有类的父类,是Java层中的最高层类。

Object类中主要包括clone()、finalize()、equals()、toString()等方法,其中常用的两个方法为equals()和toString()方法。任何类都可以重写Object类中的方法。

Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型。

getClass()方法

它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。

getClass().getname();

可以将getClass()方法与toString()方法联合使用。

toString()方法

toString()方法的功能是将一个对象返回为字符形式,他会返回一个String实例。在实际的应用中通常重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的toString()方法。

对象类型的转换

对象类型的转换在JAVA编程中经常遇到,主要包括包括向上转型与向下转型操作

向上转型

平行四边形是特殊的四边形,也就是说平行四边形是四边形的一种。

从图中可以看出,平行四边形类继承了四边形类。向上转型是从一个较为具体的类到较抽象的类的转换,所以他总是安全的。

向下转型是将较抽象的类转换为较具体的类,如果将父类对象直接赋予子类,会发生编译错误,因为父类对象不一定是子类的实例。越是具体的对象,具有的特性越多;越是抽象的对象,具有的特性越少。将父类对象强制转换为某个子类对象,这种方式称为显示类型转换。

使用instanceof操作符判断对象类型:

判断父类对象是否为子类对象的实例,这个判断通常使用instanceof操作符来完成。

instanceof的语法格式如下:

myobject instanceof ExampleClass

myobject:某类的对象引用 ExampleClass:某个类

使用instanceof操作符的表达式返回值为布尔值。如果返回值为true,说明myobject对象为ExampleClass的实例对象;如果返回值为false,说明myobject对象不是ExampleClass的实例对象。

ps:instanceof是Java语言的关键字,在Java语言中的关键字都为小写。

方法的重载

构造方法的名称由类决定,所以构造方法只有一个名称。如果希望以不同的方式来实例化对象,就需要使用多个构造方法来完成。由于这些构造方法都需要根据类名进行命名,为了让方法名相同而形参不同的构造方法同时存在,必须用到方法重载。

方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。

定义不定长参数方法

不定长方法的语法如下:

返回值 方法名(参数数据类型...参数名称)

多态
利用可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。对象可以作为父类的对象实例使用,这种将子类对象视为父类对象的做法称为向上转型。

向上转型语法:

子---》父类 比喻:自动类型转型

父类类型 变量名=new 子类类型(); Animal a=new Cat();

向下转型语法:

父---》子类 比喻:强制类型转换,需要加强制类型转换符)

子类类型 变量名=(子类类型)父类变量名; Cat a=(Cat) Animal;

多态指的是多种形态,父类型引用指向子类型对象,包括编译阶段和运行阶段。

编译阶段:绑定父类的方法 运行阶段:动态绑定子类型对象的方法。

抽象类与接口

抽象类

在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。

抽象类的语法如下:

public abstract class Test{

 abstract void testAbstract(); //定义抽象方法

}

使用abstact关键字定义的类为抽象类,而使用这个关键字定义的方法为抽象方法。抽象方法没有方法体,承载这个抽象方法的抽象类必须被继承,抽象类除了被继承之外没有任何意义。

反过来说,如果声明一个抽象的方法,就必须将承载这个抽象方法的类定义为抽象类,不可能在非抽象类中获取抽象方法。换句话说,只要类中有一个抽象方法,此类就被标记为抽象类。

抽象类被继承后需要实现其中所有的抽象方法,也就是保证所有的方法名称、参数列表和相同返回值类型创建出非抽象方法,当然也可以是抽象方法。

继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖

接口
接口简介

接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。

public interface drawTest{

  void draw(); //接口内的方法,省略abstract关键字

}

public:接口可以像类一样被权限修饰符修饰,但public关键字仅限用于接口在与其同名的文件中被定义。

interface:定义接口关键字

drawTest:接口名称

一个类实现一个接口,可以使用implements关键字

public class Parallelogram extends Quadrangle implements drawTest{

..//

}

在接口中,方法必须被定义为pblic或abstract形式,其他修饰权限不被java编译器认可。

或者说,即使不将该方法声明为public形式,它也是public。

//在接口中定义的任何字段都自动是static和final的。

接口与继承

Java不允许出现多重继承,但使用接口就可以实现多重继承。一个类可以实现多个接口,因此可以将所有需要继承的接口放置在implements关键字后并使用逗号隔开。但可能会在一个类中产生庞大的代码量,因为继承一个接口时需要实现接口中所有的方法

多重继承的语法如下:

class 类名 implements 接口1,接口2,...,接口n

在定义一个接口时,使该接口继承另外一个接口。

interface intf1{

}

Interface intf2 extends intf1{

}

你可能感兴趣的:(java,开发语言)