11.抽象类和接口
1.在JDK1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些? [多选题]全选
您的回答:
A、抽象类中可以有普通成员变量,接口中没有普通成员变量。
B、抽象类和接口中都可以包含静态成员常量。
C、一个类可以实现多个接口,但只能继承一个抽象类
D、抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
2.抽象类与接口的区别是什么?
抽象类中可以有一个或多个抽象方法,而接口中的方法必须都是抽象方法
接口所属性只能是publist static final修饰的,而抽象类中的属性则可以是任何类型的属性;
抽象类只能单继承,接口之间可以是多继承,一个类可以实现多个接口
通常来说,抽象类可以表示同一类事物,而接口可以表示一种能力
3.类和类之间的关系有哪几种?分别是什么?每种关系在代码中是如何体现的?
共5种
继承
关联
聚合
组合
依赖
继承:is
判断:is
代码:extends
依赖:偶然发生的联系,
判断:use 代码:方法中的参数,或方法中的局部变量;
关联:是一种强依赖;
判断:has 代码:作为属性来存在; 聚合:关联的一种特殊形式,代码相同;都是属性;主要强调的是整体和局部 组合:关联的一种特殊形式,代码相同,都是属性;整体和局部有相同的生命周期;
4.【编程题】类之间的关系 要求:先说明由几个类;然后确定类和类(接口)的关系,画出类图;再编程来实现
1.模拟司机(Driver)可以开汽车(Car);而汽车不属于司机;
2.武将,可以使用各种武器(刀,弓,矛)进行攻击,武将最多只能有一把武器,可以对敌军的人物造成伤害;
3.电脑可以从U盘,数据相机,mp3等电子设备中下载数据;
4.班级由多个学生和只有一个教师组成;
更改老师,添加,删除学生;
5.模拟天天酷跑中的主人公,主角(Actor)可以有一个宠物,宠物可以有猫,狗,免,主角在跑的时侯,他的宠物可以跟着一起跑;
6.模拟一下开心牧场;农场中有农户,各种动物(牛,马,羊,鸡等),农户可以喂养动物;
略(翻笔记)类图!!!
笔记
抽象类(abstract)
抽象方法,没有方法的实现体。如果一个类中含有抽象方法,这个类一定是抽象类。抽象类中也可以包含非抽象方
法
抽象类不能实例化,可以定义一个类继承抽象类 ,重写所有的抽象方法,创建这个子类的对象
代码
public abstract class Test {
//属性
private String name;
//常量属性
public static final String IP = "192.168.1.11";
//构造器
public Test(){
}
//定义非抽象方法
public void method2(){
}
//定义了一个抽象方法
public abstract void method();
}
public class TestSub extends Test {
@Override
public void method() {
System.out.println("TestSub method");
}
public static void main(String[] args)
{
TestSub ts = new TestSub();
ts.method(); } }
模板设计模式
定义一个抽象类,在抽象类中的非抽象方法中 写好一个算法过程,在这个方法中调用抽象类中的抽象方法,就相
当于定义了一个模板类。要使用这个模板类,必须要定义一个子类继承模板类,重写抽象方法,就可以调用子类继
承的非抽象方法了。
public abstract class Bank {
public abstract double getBenjin();
public abstract double getLv();
/**
* 本金 * 利率 *
@return
*/
public double lixi(){
return getBenjin()*getLv();
}
}
public class BankSub extends Bank {
@Override
public double getBenjin() {
return 10000; }
@Override
public double getLv() {
return 0.03; }
public static void main(String[] args) {
BankSub b = new BankSub();
System.out.println(b.lixi());
} }
接口(interface)
定义接口
语法:
[<修饰访问符>] interface 接口名{
[常量]
[抽象方法]
}
接口一定是public的
接口的属性,默认是有public static final修饰,因为接口中只能定义常量
接口中的方法,默认是有abstract修饰,因为接口中的方法都是抽象方法
public interface ITest {
//public static final String name = "test";
String name = "test";
public void method(); }
实现接口
定义一个类实现接口(implements),重写接口中所有的方法
public class TestImpl implements ITest{
@Override
public void method() {
System.out.println("TestImpl method方法");
}
public static void main(String[] args) {
TestImpl t = new TestImpl();
t.method();
} }
一个类可以实现多个接口
public class TestImpl implements ITest,IUSB{
@Override
public void method() {
System.out.println("TestImpl method方法");
}
@Override
public void tran() {
System.out.println("USB 传输数据");
}
public static void main(String[] args) {
TestImpl t = new TestImpl();
t.method();
} }
一个类可以继承一个类并实现多个接口,把extends写在implements的前面
public class TestImpl extends Computer implements ITest,IUSB{
@Override
public void method() {
System.out.println("TestImpl method方法");
}
@Override
public void tran() {
System.out.println("USB 传输数据"