在千锋逆战班学习第十七天 final习题和接口练习(上)

千锋逆战班
在千锋"逆战”学习第17天,
每个人生阶段都需要努力去扮好自己的角色,越努力越轻松,越坚强越幸运!
加油!

final练习

1(final属性的初始化)有如下代码
class MyClass7{
	final int value;
	public MyClass7() {	}
	public MyClass7(int value) {
		this.value=value;
	}
}
public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyClass7 mc=new MyClass7(10);
		System.out.println(mc.value);
	}
}
选择正确答案:
A. 编译通过,输出 10
B. 编译不通过,把第 2 行改为 final int value = 10;
C. 编译不通过,把第 3 行改为 public MyClass(){ value = 10; }
答案选择 C
2(final变量)有如下代码
class MyClass8{
	public void printValue(final int value) {  \\局部定义一个final 类型变量
		System.out.println(value);  
	}
	public void changeValue(int value) {局部定义一个int 类型变量
		value=value*2;
		System.out.println(value);
	}
}
public class Test8 {
	public static void main(String[] args) {
		MyClass8 mc=new MyClass8();
		int value=5;
		final int fvalue=10;
		mc.printValue(value);//1
		mc.changeValue(fvalue);//2
		mc.changeValue(value);//3
		mc.changeValue(fvalue);//4
	}
}
选择正确答案
A. 编译通过
B. //1 出错
C. //2 出错
D. //3 出错
E. //4 出错
答案选择 A
3( final 修饰引用)有如下代码
class MyValue{
	int value;
}
public class Test9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final MyValue mv=new MyValue(); //引用数据类型只是地址不能改变,内容可以改变
		mv.value=100;
		//1
		System.out.println(mv.value);
	}

}
下面说法正确的是:
A. 编译不通过
B. 编译通过。在//1 处加上:mv.value = 200; 则编译不通过
C. 编译通过。如果在//1 处加上:mv = new MyValue(); 则编译不通过。
答案选择 C
4
class Super {
	public final void m1() {
		System.out.println("m1() in super");
	}

	public void m1(int i) {
		System.out.println("m1(int) in Super");
	}
}

class Sub extends Super {
	public void m1(int i) {
		System.out.println("m1(int )in sub");
	}

	public void m1(double d) {
		System.out.println("m1(double )in sub");
	}
}

public class Test {
	public static void main(String[] args) {
		Sub s=new Sub();
		s.m1();
		s.m1(10);
		s.m1(1.5);
	}
}
以上程序是否能编译通过?如果可以,输出运行的结果;如果不可以,应该怎样
编译通过 运行结果如下:
m1() in super
m1(int )in sub
m1(double )in sub
5(修饰符综合)
下列方法声明中正确的是:
A. abstract final void m() f
B. public void final m() f
C. static abstract void m() f
D. private final void m() t
E. private abstract void m() f
F. public static final void m()t
答案:D F
A中abstract 与final冲突
B中void 和final位置放反
C中static与abstract冲突
E中private与abstract冲突 

interface练习(一)

1 代码改错
interface IA{
	void m1();  \\默认为 publlic abstract修饰
	int a=100;
}
class MyClass implements IA{
	 void m1() {} \\实现接口中的抽象方法时,访问修饰符必须是public
}
public class TestInterface {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IA ia=new MyClass();
		ia.m1();
		System.out.println(IA.a);
	}

}
将MyClass类中m1()权限方法改为public
2 代码填空
interface IA{
	void m1();
	void m2();
}
_________ class MyClassA implements IA{
	public void m1() {}
}
class MyClassB extends MyClassA{
	_________________{}
}

答案
abstract
public void m2()

今日总结

final:

I. 修饰类:此类不能被继承
II. 修饰方法:此方法不能被覆盖
III. 修饰变量:此变量值不可改变–常量(无初始值、只允许赋值一次)
1). 局部常量:显示初始化
2). 实例常量的赋值:显示初始化、动态代码块、构造方法。
要求:
a).实例常量赋值deadline:在构造方法完成之前,为实例常量赋值即可。
b).如果在构造方法中为实例常量赋值,必须保证所有的构造方法都可正确赋值。
3). 静态常量的赋值:显示初始化、静态代码块。
要求:
a). 静态常量赋值deadline:在类加载完成之前(通过类名调用之前),为静态常量赋值即可。

IV. 不同常量类型的特点:

1). 基本数据类型常量:值不可变。
2). 引用数据类型常量:地址不可变。

接口:
1. 接口的语法:

I. 相当于特殊的抽象类,定义方式、组成部分,与抽象类类似。
II. 接口中只能定义公开静态常量(变量)
III. 接口中只能定义公开抽象方法(方法)
IV. 接口不是类

2. 接口与抽象类的异同:
I. 相同:

1). 可以编译成字节码文件
2). 不能创建对象。(接口不是类,不是模板的概念,也没有构造方法)
3). 可以声明引用。
4). 具备Object定义的方法。

II.不同:

1). 接口中的属性只能是公开静态常量(隐式使用public static final修饰)
2). 接口中的方法只能是公开抽象方法(隐式使用public abstract修饰)
3). 没有构造方法、没有动态代码块、没有静态代码块

3. 接口的概念:
I. 接口是种能力和约定

1). 接口的定义:能力
2). 方法的定义:约定

II. 经验:Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。
III.接口支持多实现,可为类扩充多种能力。
4. 接口的规范:

I. 任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。
II. 实现接口中的抽象方法时,访问修饰符必须是public。

5. 接口引用:

I. 同父类一样,接口也可声明为引用,并指向实现类对象。
II. 注意:
1). 仅可调用接口中所声明的方法,而不可调用实现类中独有的方法。
2). 可强转回实现类的本身类型,进行独有的属性和方法的调用。(强转前通过instanceof判断)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值