阿猛学习笔记java六抽象类,接口,单元测试,内部类

十抽象类和接口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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值