1.final
1)final修饰变量:为常量 可以在定义的时候 或是 构造方法中进行初始化
给初始化值之后就不能改变
静态常量public static final String TYPE; 以后编程会很常用
可以在定义的时候 或是 初始化块中进行初始化
给初始化值之后就不能改变
2)final修饰方法 :该方法不能在子类中被覆盖
3)final修饰类:该类不能被继承
2.抽象类
1)由abstract修饰的类 称为抽象类 由 abstract修饰的方法 称为抽象方法
2)含有抽象方法的类 一定要声明为抽象类 一个类如果继承另一个抽象类 必须
实现 父类未实现的抽象方法 否则也可以把 子类声明为抽象类 方法还为抽
象方法
3)抽象类不能实例化对象
4) 抽象方法只需要声明 不需要具体实现 public abstract void show();
5)抽象类里可以没有抽象方法 但是是没有意义
3.接口:
1) 从宏观上来讲 接口是一个规范
2) 是抽象方法 和常量值 的定义的集合
3) 关键字 interface
4)一个类实现接口 使用 implements
5)一个类如果要是实现了一个接口 那么就要实现接口里声明的方法
否则 可以把方法声明为抽象方法 类声明为抽象类 (第一种做法常见)
6)使用接口的指定者 实现者 使用用者相分离 (开发过程中的好处)
架构师:制定接口
普通程序员:使用者
程序员:实现者
7)一个接口可以被多个类实现
8)一个类可以实现多个接口
9)接口可以继承自接口
举例:
接口:
public interface Sport {
int count=10;
void run();
void jump();
}
实现类:
public class Athlete implements Sport{
public void run(){
System.out.println("短跑");
}
public void jump(){
System.out.println("三级跳");
}
}
4.工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。
接口:
public interface Office{
public void start();
}
实现类(一)
public class Access implements Office{
public void start(){
System.out.println("Access Start");
}
}
实现类(二)
public class Excel implements Office{
public void start(){
System.out.println("Excel Start");
}
}
实现类(三)
public class Visio implements Office{
public void start(){
System.out.println("Visio Start");
}
}
实现类(四)
public class Word implements Office{
public void start(){
System.out.println("Word Start");
}
}
工厂模式实现
public class OfficeFactory {
//工厂模式实现
public static Office getOffice(String type) {
Office office = null;
if ("word".equals(type)) {
office = new Word();
} else if ("excel".equals(type)) {
office = new Excel();
} else if ("visio".equals(type)) {
office = new Visio();
} else if ("access".equals(type)) {
office = new Access();
} else {
office = new Word();
}
return office;
}
}
5.接口使用误区
1)所有的java类都是继承Object的,所以多重继承就有问题,为了解决多继承的问题,引
入接口的 概念。这句话是否正确?
不正确。接口内容的引入是解决了多继承的问题,但是它的引入的真正目的不是为了多
继承的概念,它是一种程序设计的模式,是接口与实现相分离的解决方案。
2)由于java?interface中声明的字段在编译时会自动加上static?final的修饰符,即声明
为常量。因而interface通常是存放常量的最佳地点。 这句话是否正确
不一定。为什么?
(1)因为在java实际应用中会产生一些问题。起因有两点:一、我们所使用的常量并
不是 一成不变的,只是相对与变量不能赋值改变。二、部分编译。
(2)需要看具体的情景。如果工程需要运行的速度,直接在接口中设置常量即可。如
果工程需要部分修改,能够支持部分编译,则在类中进行定义更好。一般来说,
interface方式中一般不定义成员数据变量。
3)abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至
可以相互替换,所以在选择上具有随意性。这句话是否正确?
不正确。两者之间还是有很大的区别的。
(1)从语法 和编程角度来说区别有:
A.abstract 类里 可以有自己的数据成员 ,也可以有自己的方法 可以有抽象方
法,也可以有不是abstract的方法 ,给出默认实现,interface一般不定义数
据成员 所有的方法都是抽象的方法
B.abstract类 在java中是表示一种继承关系 一个类只能继承自一个类 而一个
类可以实现多个接口
(2) 从问题域的角度来看
abstract类 在java中是表示一种继承关系 ,要想使得关系合理 父类和派生类
要存在“is a” 的关系,而接口则不然 接口并不要求 接口的定义 和接口的实
现 本质上相同 只是实现契约 而已