Java-接口

接口的概念

在Java中接口是一个全部由抽象方法组成的集合,使用关键词interface来定义,里面只能有抽象的方法和常量,没有构造方法。

注意:interface代替了class关键字,可以使用public来修饰它,如果不用public关键字,它就只有包访问权限,只能在一个类中使用它。接口也可以包含域,这些域隐式的是static和final…

什么时候使用接口和抽象类

  • 什么时候使用接口和抽象类 抽象类是对事物本身的抽象,比如教师类,学生类就可以抽象为人类。

  • 接口是对行为的抽象,比如教师要学英语,学生也要学英语,学英语就可以抽象为接口。

  • 抽象类表示的是这个对象是什么,接口是表示这个对象能干什么。

  • 所以抽象类只能有一个子类,就比如教师和学生只能是人类不能是非人类。

  • 而教师或者学生可以实现多个接口。他们既可以学英语也可以学数学。

接口特点

  • 接口不可以被实例化,也不能直接创建对象(只有抽象方法,没有具体功能)
  • 接口可以继承,由子类实现功能,然后实例化
  • 一个子类可以继承多个接口吗,通过implements关键字实现
  • 接口通过多态才能创建对象

接口的定义和继承:

interface Aoo {
    public abstract void run();
}

interface Boo extends Aoo{  // 接口可以继承
    static final int b =5; // 接口只能定义static final 常量,推荐加static final
    public abstract void sleep();
}

接口的实现,继承多个接口:

abstract class Aoo { // 抽象类
    abstract void add();
}
interface Boo {
    static final int b = 2; // 定义常量
    abstract void sleep(); // 抽象方法
}
interface Coo{
    abstract void eat();
}
class Doo extends Aoo implements Boo,Coo { // 继承多个接口
    public void add(){ // 实现Aoo中的方法
        System.out.println("111");
    }
    public void sleep(){ // 实现Boo中的方法
        System.out.println(Boo.b); // 常量不能修改
        System.out.println("正在睡觉");
    }
    public void eat(){ // 实现Coo中的方法
        System.out.println("正在吃饭");
    }
}
public class Interment {
    public static void main(String[] args){ // 文件的出口
        Doo d = new Doo();  // 实例子类
        d.add(); // 打印结果:111
        d.eat(); // 打印结果:2 正在睡觉
        d.sleep(); // 打印结果:正在吃饭
    }
}

内部类

  • 成员内部类在外部类的成员位置,成员内部类可以无条件访问外部类的所有内容包括static静态的和private私有的。
  • 外部类不能直接访问内部类的变量和方法,需要通过创建内部类的对象来访问
  • 成员内部类的访问权限是private,那么这个内部类只能在外部类中访问
  • 局部内部类是定义在一个方法里的类,局部内部类的访问仅限于方法内或者该作用域内。
  • 静态类部类格式上就是成员内部类前面加了static,他的特点是只能访问外部类中被static修饰的成员。
  • 匿名内部类的前提条件是存在一个类或者接口,这个类可以为抽象类。

内部类的创建和访问:

public class Outside { // 外部类
    int a = 10;
    private int b = 20; // 私有变量
    class Inside { // 内部类
        void show (){
            System.out.println(a+",,,"+b);
        }
    }
    public static void main(String[] args){ // 问件出口
        Inside in = new Outside().new Inside(); // 实例时通过new外部类.new内部类
        in.show();  // 调用内部类中的方法
    }
}

匿名内部类的使用:

interface Aoo{ // 创建接口
	public abstract void learn();  // 抽象方法
}
 
class Boo {
	public void student(Inter a) { // 把接口Inter作为参数传递
		a.learn();
	}
}
 
public class Text {
	public static void main(String[] args) { // 文件出口
		Aoo a=new Aoo() {	// 匿名内部类的创建
			public void learn() {	// 直接实现抽象方法
				System.out.println("开车");
			}
		};
		a.learn();        // 调用learn方法
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜丶陌颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值