java web 遇到的类(3)

1、匿名内部类

在学习SSH框架动态代理时,静态代理有带理类,而动态代理没有代理类。但是动态代理有代理对象,对象的创建需要用到工具方法,newProxyInstance(p1,p2,p3)的第三个参数用到了匿名内部类。

顾名思义,匿名内部类没有显式的类名。因为没有名字,所以他只能使用一次,再次使用就需要再次创建一遍匿名类,因此匿名内部类一般是用在只是用一次的地方。
本质:匿名内部类隐式继承一个类或者实现一个借口,换句话说,它是一个继承了该类或者实现该接口的子类匿名对象
使用匿名内部类有个前提条件必须继承一个父类或者实现一个接口。

格式new 类名/接口/抽象类 () { }

实例
1-1不使用匿名内部类

//抽象类
abstract class Person {
	public abstract void eat();
}

//Child类继承Person类并重写父类方法
class Child extends Person {

	public void eat() {
		System.out.println("吃冰激凌");
	}
}

public class BH {

	public static void main(String[] args) {
		Person p1 = new Child();
		p1.eat();
	}

}

结果:

吃冰激凌

1-2 使用匿名类

//抽象类
abstract class Person {
	public abstract void eat();
}

public class BH {

	public static void main(String[] args) {
		//使用了匿名内部类创建对象
		Person p1 = new Person() {
			public void eat(){
				System.out.println("eat 冰机灵");
			}
		};
		
		//调用方法
		p1.eat();
		
	}

}

结果:

eat 冰机灵

省略了创建类的过程。

最常用的情况是用在多线程的实现上因为要实现多线程就必须继承Thread类或者实现Runnable接口

2、接口和抽象类

在刚才关于内部类的过程中,遇到了抽象类和接口。在这里记录一下两者的区别。

接口
:是一个规范,只管做什么,不管你怎么实现,就是一个对外提供有哪些功能的声明,你想用这些功能就去找实现它的子类,实现它的子类肯定会有相应的实现。
注意

  • a:接口中的所有属性默认为 public static final
  • b:接口中的所有方法默认为public abstract
  • c:关键字-implement

抽象类

  • abstract修饰的类为抽象类,此类不能有对象(不能new)
  • abstract修饰的方法为抽象方法,该方法不能有方法体即大括号
  • 抽象类中的抽象方法必须在子类中被重写

多态:类加载运行时父类的引用指向子类的对象;

抽象程度:接口 > 抽象类

抽象类和接口区别

  1. 抽象类描述的是“是不是”的问题,比如Child是一个Person;而接口描述的是“有没有”的问题,类A实现(implement)接口B,则A里有B的功能
  2. 继承只能单继承;实现可以多实现,接口之间用逗号隔开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值