Java知识(接口和匿名类)


1.接口
接口语法:
public interface 接口名{
//静态常量
//抽象方法
}
例如:
public interface DemoInterface {
//静态常量
static final int DEMO_A=10;
//抽象方法
public abstract void test();
//静态常量默认可以不加static final
int A=10;
//抽象方法默认可以不加public static
void test2();
}
接口的特性:
1.接口不可以被实例化
2.实现类必须实现接口的所有方法,否则实现类必须是抽象类
3.类可以实现多个接口,来弥补java不能多继承
4.接口中的变量都是静态常量
使用接口:
public class 类名 implements 接口1,接口2... {
//重写接口方法
}
例如:
public class DemoImpl implements DemoInterface {
@Override
public void test() {
// TODO Auto-generated method stub

}
@Override
public void test2() {
// TODO Auto-generated method stub

}
}

接口是一种规范,体现在接口名称和注释是上:有的接口只有名称;方法的实现方式要通过注释来约定
面向接口编程: 程序设计时面向接口的约定而不考虑具体实现

接口的优点:
1.可以被多继承,接口可以继承接口,一个接口可以继承多个接口
2.设计和实现完全分离
3.更自然的使用多态
4.更容易搭建程序框架
5.更容易更换实现

接口和抽象类的区别:
本质区别:class和interface关键字不同。抽象类是类,接口是规范
接口可以继承接口,并可以继承多个接口,但类只能单根继承
接口只能做方法声明,抽象类可以有方法的声明,也可以做方法实现
抽象类能够保证实现的层次关系,而接口则是能够更有效地分离行为与实现
2.匿名类
定义:匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行,这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
作用:匿名类的目的是在某个地方需要特殊的实现,因此在该处编写其实现,并获取它的实例,调用它的方法。不要在匿名内部类编写其他的方法,是不可见的。

public interface A {
void show();
A play(int m);
}

public class LastTest {
public static void main(String[] args) {
//匿名类
//匿名实现类
A a=new A() {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("打印内容");
}
@Override
public A play(int m) {
// TODO Auto-generated method stub
return null;
}
};
a.show();
//匿名子类(匿名抽象类)
D d=new D() {
};
System.out.println(d.toString());
}

}

abstract class D{
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
匿名内部类是指在声明一个类的同时实例化它,而不需要为该类命名。在Java中,匿名内部类通常用于实现接口或继承抽象类。 下面是一些关于匿名内部类的知识点: 1. 声明匿名内部类:可以在创建对象的同时定义匿名内部类,使用new关键字后紧跟接口或抽象类的定义,并重写其中的方法。例如: ```java InterfaceName obj = new InterfaceName() { // 匿名内部类的实现 // 重写接口中的方法 }; ``` 2. 实现接口匿名内部类常用于实现接口,可以直接在创建对象时实现接口的方法,省去了单独创建一个实现类的步骤。 ```java Runnable runnable = new Runnable() { @Override public void run() { // 实现Runnable接口的run方法 } }; ``` 3. 继承抽象类:匿名内部类也可以继承抽象类,并重写其中的抽象方法。 ```java AbstractClass obj = new AbstractClass() { @Override public void method() { // 实现抽象类中的方法 } }; ``` 4. 访问外部变量:匿名内部类可以访问外部类中的成员变量,但需要将其声明为final或实际上是final的(Java 8之后,如果变量未被后续代码修改,可以不显式声明为final)。 ```java int num = 10; InterfaceName obj = new InterfaceName() { @Override public void method() { System.out.println(num); // 访问外部变量 } }; ``` 需要注意的是,匿名内部类没有名称,因此无法通过名称直接创建多个对象。每次使用都需要重新定义匿名内部类。匿名内部类通常用于简单的场景,如果需要复杂的逻辑或多次使用,建议单独定义一个具名的内部类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值