您的位置:首页 > 移动开发 > Android开发

Android:JAVA语言extends和implements用法的学习

2018-01-10 15:23 627 查看
Android:JAVA语言extends和implements用法的实例学习


一、extends和implements介绍

1、extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承.

2、JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements.

3、继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ;  比如  class A extends B implements C,D,E 4、extends 继承类;implements 实现接口.

5、类和接口是不同的:类里是有程序实现的;而接口无程序实现,只可以预定义方法! 

6、Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。       
二、以Java程式语言的角度来看﹐Java的interface是一些函数或资料成员为另一些属于不同类别的物件所需共同拥有,则将这些函数与资料成员定义在一个interface中,然后让所有不同类别的Java物件可以共同操作使用之;Java的class只能继承一个父类别(用extends关键字),
但可以拥有许多interface(用implements关键字)。    
 

三、extends和implements有什么不同?        
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。         

interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。 这些实现的class的实例完全可以当作interface的实例来对待。 在interface之间也可以声明为extends(多继承)的关系。一个interface可以extends多个其他interface。  
四、简单的说,extends可以理解为全盘继承了父类的功能; implements可以理解为为这个类附加一些额外的功能; 举个例子,Animal是一个父类,cat,dog,bird,insect都extends了Animal, 但是cat,dog,bird还可以implements比如run,shout,这些interface,bird,insect可以 implements比如fly这些interface;

五、继承过后通常会定义一些父类没有的成员或者方法。

class B extends A

继承过后通常会定义一些父类没有的成员或者方法。

A a = new B();

这样是可以的,上传。

a是一个父类对象的实例,因而不能访问子类定义的新成员或方法。

假如这样定义:

class A{

int i;

void f(){}

}

class B extends A{

int j;

void f(){}//重写

void g(){}

}

六、实例学习。

1、java代码extends_and_implements.java

interface Runner
{
int ID=520111;
void run ();
}
interface Flyer
{
void fly ();
}
interface Shouter
{
void shout();
}
/*
**extends可以理解为全盘继承了父类的功能,不需要重run方法。
*/
interface Animal extends Runner
{
int ID=96;
void breathe();
}

class Fish implements Animal
{
int ID=98;
static int fish_id=10;
public void run ()
{
System.out.println("fish is swimming");
}
public void breathe()
{
System.out.println("fish is bubbing");
}
}

class Bird implements Runner , Flyer
{

public void run ()
{
System.out.println("the bird is running");
}
public void fly ()
{
System.out.println("the bird is flying");
}
}

abstract class LandAnimal implements Animal
{

public void breathe()
{
System.out.println("LandAnimal is breathing");
}
}
/*
**********************************************************************************************
****如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。
****Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。下面的例子中 FlyAnimal就不需要重写Animal以及Flyer接口中的方法
****Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。
****Final和abstract永远不会同时出现。
***********************************************************************************************
*/
abstract class FlyAnimal implements Animal , Flyer
//class FlyAnimal implements Animal , Flyer//error,FlyAnimal不是抽象的, 并且未覆盖Runner中的抽象方法run()
{

public void breathe()
{
System.out.println("LandAnimal is breathing");
}

}
/*

**********************************************************************************************
***抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。
***例如下面的swallow燕子类继承FlyAnimal,必须实现抽象类FlyAnimal里面的breathe()和run ()和fly ()方法以及Shouter类里面的shout()方法
***********************************************************************************************
*/
class Swallow extends FlyAnimal implements Shouter
//class Swallow implements FlyAnimal , Shouter//error错误: implements后面需要跟接口
{

public void breathe()
{
System.out.println("Swallow is breathing");
}
public void run ()
{
System.out.println("Swallow is runing");
}
public void fly ()
{
System.out.println("Swallow is flying");
}
public void shout()
{
System.out.println("Swallow is shouting");
}
}

public class extends_and_implements
{
public static void main (String args[])
{
int j = 0;
System.out.println("extends_and_implements class!");
Fish mFish = new Fish();
Swallow m_Swallow=new Swallow();
//Animal mAnimal=new Animal();

//FlyAnimal mFlyAnimal= new FlyAnimal();//错误: FlyAnimal是抽象的; 无法实例化
mFish.run();
System.out.println("mFish.ID="+mFish.ID);
j = Runner.ID;
System.out.println("Runner.ID="+j);

System.out.println("Fish.fish_id="+Fish.fish_id);
Fish.fish_id=20;
System.out.println("Fish.fish_id="+Fish.fish_id);
//Swallow.breathe();//error,错误: 无法从静态上下文中引用非静态 方法 breathe()
m_Swallow.breathe();
}
}
2、编译&执行




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐