接口的作用
java不支持多继承只能有一个直接父类
java允许一个类实现多接口
java中的接口就是用来实现的
接口的特性及创建
接口中属性定义必须是公共的、静态的、常量
接口中值允许定义公共的、抽象的实例方法
接口必须由其具体实现类进行实例化
接口回调:根据实际扩展类来确定调用扩展类中实现的方法的过程和现象
接口的继承
java规定接口只能由其他接口实现继承
子接口继承的目的在于拥有父接口功能后添加新的抽象定义
一个普通类实现接口时必须同时实现父接口的抽象方法
接口被实现目的就是实现业务功能具体化
内部类的作用
内部类通过外部类访问从而被限定使用权限
内部类所定义功能更多时候只为外部类提供
内部类让某些功能使用更加安全
内部类的定义和创建
内部类必须定义在某个类当中,所在类为其外部类
内部类可使用public,protected,private访问修饰符
内部类可以使用abstract,final,static修饰符
内部类没有单独的java源文件,只有class文件
内部类的类文件名称规范:外部类名$内部类名.class
创建普通内部类:
Computer.Cpu cpu = new Computer().new Cpu();
创建静态内部类:
Computer.Cpu cpu = new Computer.Cpu();
创建一个名为Computer的接口
package com.xit.interfaces;
public interface Computer {//创建一个名为Computer的接口
void useComputer();//创建抽象方法
}
创建名为NoteBookComputer的类来实现接口Computer,在内部创建一个内部类
package com.xit.interfaces.imp;
import com.xit.interfaces.Computer;
public class NoteBookComputer implements Computer {//创建类实现接口
@Override
public void useComputer() {
Hoard hoard = new NoteBookComputer.Hoard();//创建了一个本地的静态内部类对象
hoard.displaySelfInfo();//调用内部静态类方法
}
public class Cpu{//创建一个内部类
public void handleDate() {
System.out.println("我是处理器我可以很快的处理业务数据");
}
}
/**
* 私有的静态内部类
* @author Administrator
*
*/
private static class Hoard{
public void displaySelfInfo() {
System.out.println("我是主板,是静态类");
}
}
}
创建main方法来调用内部类中的方法
package com.xit.test;
import com.xit.interfaces.imp.NoteBookComputer;
import com.xit.interfaces.imp.NoteBookComputer.Cpu;
public class Test {
public static void main(String[] args) {
Cpu cpu = null;//外部类引用内部类
NoteBookComputer nbc = new NoteBookComputer();
cpu = nbc.new Cpu();
cpu.handleDate();
}
}
局部类
匿名类对象
匿名类对象就是没有名称类型的对象
匿名类对象经常作为接口或抽象类的实现
匿名类对象可减少接口或抽象类实现类的定义
匿名类对象一定属于它实现的父级类型
package com.xit;
import com.xit.interfaces.Computer;
public class Staff {
public void useComputerWorking(Computer computer,double n,double m) {
computer.useComputer(n, m);
}
}
package com.xit.test;
import com.xit.Staff;
import com.xit.interfaces.Computer;
public class TestHiddenClassNamerObject {
public static void main(String[] args) {
Staff mark = new Staff();
double a = 546.54,b = 54.484;
mark.useComputerWorking(new Computer() {
@Override
public void useComputer(double a, double b) {
// TODO Auto-generated method stub
System.out.println(a+b);;
}
}, a, b);
}
}
思考:
1.设计内部类的主要目的是什么?()
2.内部类如何进行创建有哪些限制?()
3.什么是局部类,与内部类有什么关系?(局部类是在方法内创建类)
4.匿名对象是什么,使用它有什么好处?(使用内部对象就不用给对象起名了)【匿名对象是没有名字的对象,好处是创建对象不需要用变量来接收】
静态代码块中的内容
静态代码块中允许访问静态属性
静态代码块中允许调用静态方法
静态代码块中允许定义局部变量及常量
静态代码块中允许定义局部类
静态代码块中不能访问实例属性和方法以及定义方法
package com.xzit;
public class Location {
public static final int EAST;
public static final int WAST;
public static final int SOUTH;
public static final int NORTH;
/**
* 静态块
*/
static {
EAST = 0;
WAST = 1;
SOUTH = 2;
NORTH =3;
display();
}
public static void display() {
System.out.println("您的当前默认位置是 "+NORTH);
}
}
package com.test;
import com.xzit.Location;
public class Test {
public static void main(String[] args) {
System.out.println(Location.NORTH);;
}
}