代码改变世界

接口的使用,内部类

2016-11-02 23:18  backyyan  阅读(383)  评论(0编辑  收藏  举报

接口的使用:

接口定义好后,如何使用这些接口呢?只要在类的声明语句中使用关键字implements,声明该类实现了某个或多个接口,同时要在类中实现接口中定义的所有方法。具体格式如下:

[类修饰符]class类名 implements多个接口

{

实现接口中的方法

}

在类体中实现接口中的方法必须是公有public方法,如果不加public,程序会出错。我们对上面定义的接口写出具体的实现,程序如下:

Class A implements Son

{

public void fn1()

{

System.out.println(“fn1 ok”);

}

public void fn2(){

}

Public void fn3()

{

}

public void fn5()

{}

Public void fn4()

{}

}

 

接口的用法:定义一个接口图形类,派出3个子类:三角形类,矩形类,圆形类,求面积.。

package com.extend;

public class Test1{

public static void main(String []args){

 

Recte rect=new Recte(3,4);

rect,area();

Anglex ang=newAnglex(3,4);

ang,area()

Circlex cir=new Circlex(5)

Cir,area();

}

}

Interface Shape{

public final double PI=3.1415;

public abstract void area();

}

class Recte implements Shape{

private int1.w;

Recte(int a1,int b1){

this.1=a1

this.w=b1

}

public void area(){

double s;

s=1*w;

System.out.println(“矩形的面积为:”+s);

}

}

class Anglex implements Shape{

private int 1,h

Anglex(int11,int h1){

this.1=11;

this.h=h1;

}

Public void area(){

double s;

s=0.5*1*h;

System.out.println(三角形的面积为:”+s);

}

}

class Circlex implements Shape{

private int r;

 

Circlex(int r1){

this.r=r1;

}

public void area(){

double s;

s=PI*r*r;

System.out.println(“圆形的面积为:”+s);

}

}

 

ps:继承抽象类:优势为抽象类中方法不需要全部实现,缺陷为单继承系。

实现接口:缺陷为接口中的方法必须全部实现,优势为多继承系。

在我们写程序的时候,可以将接口保存成一个文件,类保存成一个文件。

 

内部类和匿名类:

简单地说,内部(inner)类是指那些定义代码被置于其他定义中的类;而对于一般的类定义代码不嵌套在其他类定义中的类,称为顶层(top-level)类。对于一个内部类来讲,包含其定义代码的类称为它的外部(outer)类。

匿名类,顾名思义就是没有名字的类。并不是所有的类都可以是匿名类,只有内部类才可以是匿名类。也就是说,我们在定义内部类时,可以不给内部类起名字,称为匿名内部类,简称匿名类。

内部类:

在一个类的内部定义另外一个类,这个类就叫做内部类(inner class)。内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明为private和protected。

当我们建立一个内部类时,其对象就拥有了与外部类对象之间的一种关系,当内部类的成员方法访问某个变量/方法时,如果在该方法和和内部类中都没有定义过这个变量,词用就会被传递给内部类中保存的那个外部类对象的引用,通过那个外部类对象的引用去调用这个变量。

内部类:

public class Test2{

public static void main(String []args){

//Inner in=new Inner();错误

Outer out=new Outer();

Out.outMethod();

}

}

Class Outer

{

int s=10;

void outMethod()

{

Inner i=new Inner();;

i.inMethod();

}

class Inner

{

int t;

void inMethod()

{

t=20;

s++;

System.out.println(s+t);

}

}

}

 

 

在该程序中,在类Outer的内部包含了类Inner的定义,这时Outer类称为外部类,Inner类称为内部类。在外部类Outer的里面,可以对内部类进行任何访问,在outMethod()方法中就创建了内部类的对象,调用了内部类中的inMethod()方法。在内部类中,可以访问在外部类中定义的各种成员,例如在inMethod()方法中使用了外部类中定义的成员变量s。而在类的外部,主类中,不能对内部类直接进行访问,“Inner in=new Inner();”这条语句是错误的。我们只能创建Outer类的对象,通过外部类的成员方法对内部类进行操作。