面向对象程序设计——接口、内部类、枚举类

接口

接口的概念

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

定义接口:
1)接口可以看成是特殊的抽象类。即只包含有抽象方法的抽象类
2)可以通过infterface定义一个接口
3)接口者不可以定义成员变量,但是可以定义常量
4)接口中只可以定义没有实现的方法(抽象方法)
    可以省略 public abstract 其中一个或者两个(常量也可以)
接口的继承

接口间存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接继承了父接口中定义的所有方法。

@Test
public void t1(){
    B b = new B(){//可以在子类中通过内部类的方式对父类的抽象方法进行重写
        public void a1() {
            System.out.println("这是通过匿名内部类通过调用子类构造器对象实现父接口的a1方法");

        }
        public void a2() {
            System.out.println("这是通过匿名内部类通过调用子类构造器对象实现父接口的a2方法");
        }
    };
b.a1();
b.a2();
B.innerB bb = new B.innerB();//可以通过这种形式创建内部类对象
bb.at3();
B.innerB.at3();
/**
 * 注意:类里面可以定义以下三种形式的内部类
 * 1)非静态内部类:可以在内部定义若干成员变量和非静态方法,
 *     但是不能通过创建外部类对象去调用该普通方法
 * 2)静态内部:内部可以定义若干成员变量和若干静态方法、若干非静态方法
 *    可以通过    外部类名.内部类名.任何一种方法名()  的方式去调用。
 * 3)匿名内部类:在创建类对象时可以通过以下形式去重写(或实现)接口或
 *    抽象类的方法,
 *    类名 对象名 = new 类名(){//可以在子类中通过内部类的方式对父类的抽象方法进行重写
 *             public void a1() {  }
 *             public void a2() { }
 *             …………………………
 *    然后通过 对象名.方法名的形式去调用;
 *
*  补充和扩展:
*  1)接口也可以创建对象,和类创建对象一致,通过匿名内部类的形式去创建
*  2)可以通过
*       Outter.Inner a = new Outter.Inner(); 
*       a.内部类方法();
*       这形式去创建内部类对象(其实抽线类也可以)
 */
---------------------------Java文件分界线--------------------------------------
package myinterface;

public interface A  {//定义一个接口
    /**
     * 接口:
     * 1)接口也是一种引用数据类型,文件用interface修饰
     *    定义为public interface A{方法体}
     * 2) 接口里面可以存在 若干常量 若干抽象方法
     * 3)接口子接口必须实现父接口的所有抽象方法(除非子接口是抽象类)
     * 4)接口不能implents连接接口,但是接口可以通过extends继承接口
     *      抽象类可以连接接口
     *          public interface B extends A {   }
     *          public abstract class B implements A {    }
     */
    final static int c=1;//常量
    public abstract void a1();
    public abstract void a2();
//    public static void a3();//Extends method are not supported at language level '5'
}
---------------------------Java文件分界线--------------------------------------
package myinterface;

public abstract class B implements A {
//接口子接口必须实现父接口的所有抽象方法
public void a1() {
    System.out.println("B抽象类中实现接口A方法a1");

}
    public void a2() {
        System.out.println("B抽象类中实现接口A方法a2");
    }

    public static class innerB{
        public static void at3(){
            System.out.println("这是子类B的静态方法");
        }
    }
}
---------------------------Java文件分界线--------------------------------------
@Test
public void t2(){
    A a = new A(){
        public void a1() {
            System.out.println("这是通过匿名内部创建的接口去实例化的方法a1");
        }

        public void a2() { System.out.println("这是通过匿名内部创建的接口去实例化的方法a1");}
    };
    a.a1();
    a.a2();
}
接口与抽象类的区别

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值