十抽象类和接口1012
1.抽象类
关键字abstract
声明
修饰符 abstract class 类名{
属性
方法
}
抽象类可包含:属性,常量,普通方法,构造方法,抽像方法
特点
抽象类不能实例化
普通类继承抽象类,必须重写抽象类所有的抽象方法,抽象类继承抽象类,可选择性重写父类的抽象方法
用final修饰的方法不能重写
抽像方法
抽像方法没有方法体
抽像方法存在于抽像类中
抽像类不一定有抽像方法,但有抽像方法一定是抽像类
2.接口
关键字 interface
实现接口关键字 implements
声明
修饰符 interface 接口名{
常量
抽象方法
}
类在实现接口的时候,要用到关键字: implements
接口只能包含:常量(public static final)和抽像方法(public abstract)
优点
可以被多继承
更自然使用多态
设计和实现分离
更容易搭建程序框架
特点
接口不能被实例化
实现类可实现多个接口,且普通类必须实现父接口类的所有抽像方法,而抽像类可选择性实现父类的抽象方法
变量都是静态常量,其值不可变
普通类和抽像类只能实现接口,只有接口才能继承接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGGkaezl-1602598186030)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\1602558316800.png)]
十一单元测试
1.类别
黑盒测试:测试功能 非常容易
白盒测试:测试性能以及内部程序代码逻辑 难度大,需要代码基础
2,实现方法
@Test注解实现 使用Junit4.jar包
在普通方法上加@Test注解,导入对应的测试类,且多个测试方法可同时执行,执行时可通过注解指定先后顺序
继承TestCase类实现 使用Junit3.jar包
通过选定方法名进行运行,但只能执行单个方法
十二内部类
指在一个类中再定义一个类
1.特点
内部类作为外部类的一个成员,并且依附外部类而存在
内部类可直接访问和引用外部类的变量和方法,与外部类相比,内部类还可以声明private和protect
内部类是一个编译概念,编译后会成为不同的两个类 例:对于Outer的外部类和内部定义Inner内部类,编译后出现Outer.class和Outer$Inner.class两个类,所以内部类的成员变量/方法名可以和外部类相同
2.成员内部类
为外部类的一个成员存在,与外部类的属性、方法并列。
定义:
class Outer{
private String name=“李四”;
class Inner{ //内部类
String name=“张三”;
void display(){
System. out .println(“姓名:”+name);
System. out .println(“姓名1:”+ this.name);
System. out .println(“姓名2:”+new Outer().name);
}
}
调用:
Outer out=new Outer();
Outer.Inner in=out.new Inner();
in.display();
若内部类存在和外部类同名和属性,则外部类的属性在内部被覆盖
外部对象调用(内部类对象)调用内部方法
3.局部内部类
局部内部类和局部变量非常相似的,在方法内部定义的类。
定义:
class Outer1{
String name=“李四”;
public d void print(final int age){
final String name=“张三”;//局部内部类的方法来访问外部的局部变量的时候,必须要用final修饰
String sex=“男”;
System. out .println(“性别:”+sex);
class Inner1{//该类是在方法内部定义的类
public d void display(){
System. out .println(“姓名:”+name);
System. out .println(“年龄:”+age);
System. out .println(“姓名1:”+new Outer1().name);
}
}
new Inner1().display();//外部方法先调用内部类方法
}
}
调用:
Outer1 out=new Outer1();
out.print(100);//直接调用外部方法
外部对象调用(外部方法)调用内部类对象调用内部类方法
4.静态内部类
定义:
class Outer2{
static String name =“李四”;
static s class Inner2{// 静态内部类
static String name =“王五”;
public static d void print(){
System. out .println(“姓名1:”+ name );//此时姓名为: 王五
System. out .println(“姓名1:”+Outer2. name ); //李四
}
}
}
调用
Outer2.Inner2. print ();//直接访问静态内部类中的静态方法
5.匿名内部类
若一个匿名类只使用一次的情况下,该匿名类可定义成匿名内部类
只需为内部类建立一个对象,不必为该类指定名字
特点
匿名内部类没有构造方法
匿名内部类不能定义静态成员,方法和类
匿名内部类不能是public,protected,private,static
只能创建一个匿名内部类的实例
一个匿名内部类在new后面,用其隐含实现一个接口或实现一个类
匿名内部类只能方外外部类的静态变量和静态方法
实现方法
继承一个类,重写其方法
实现一个类,实现其方法
定义:
abstract/interface class One1{
public t abstract d void start();
public t abstract d void end();
}
One1 one=new One1(){ //匿名内部类
@Override
public d void start() {
System. out .println("–重写start()方法—");
}
@Override
public d void end() {
System. out .println("–重写end()方法—");
}
};
one.start();
one.end();