一、抽象类:
public abstract class A{
public abstract void method1();
public abstract void method2();
public abstract void method3();
}
public class B extends A{ //子类继承抽象类 必须重写所有抽象方法
public void method1(){
System.out.println("method1");
}
public void method2(){
System.out.println("method2");
}
public void method3(){
System.out.println("method3");
}
}
public abstract class C extends A{ //子类不重写 可以将你的类变成抽象类
public abstract void method4();
}
public static void main(String[] s){//抽象类不可以创建对象 不能new A()
A a=new B();
a.method1();
a.method2();
a.method3();
}
}
抽象类分为两种 :
普通抽象类 里面的方法不一定全部都是抽象的
纯抽象类 里面的所有方法都是抽象方法
抽象方法必须abstract类
Abstract类中的方法不一定都要是抽象方法。
二、接口
关键字:
声明:interface
实现:implement
1、接口是声明方法不实现。
2、接口与接口之间可以继承不能实现(重写);
3、一个类可以实现多个接口。
4、接口中的方法均为公有抽象的方法。
5、声明接口必须应用接口编程。
interface IA{
int a = 5; // 相当于 public static final int a = 5;
void x(); //相当于public abstract void x();
}
interface IB{
void y();
}
class C implements IA,IB{
public void x(){
System.out.println("c.x()");
}
public void y(){
System.out.println("c.y()");
}
}
public class Interface {
public static void main(String [] s){
IA a = new C();
a.x();
IB b = new C();
b.y();
// IA.a=7; 错误,a是常量
}
}
三、简单 工厂模式举个例子以快速明白Java中的简单工厂模式:
车站有售票员(接口)。三名:凤姐(类售飞机票)、春哥(类售火车票)、成龙(类售汽车票),三人有自己不同方式的售票和找钱的方法。
建立一简单工厂(类):
static 售票员 创建(String type){
if(type.equals("airplane")){
return new 凤姐2();
}else if(type.equals("car")){
return new 成龙();
}else if(type.equals("train")){
return new 春哥();
}else if(type.equals("high-speed rail")){
return new 李刚();
}else
return null;
}
代码实现是只用传入参数(eg:“飞机”)我们直接可以利用简单工厂来返回接口类。
假如凤姐买票方式出现问题,我们不用去改凤姐的类,只需要用凤姐2号继承凤姐覆盖其卖票方法即可。
class 凤姐2 extends 凤姐{
public void change(){
System.out.println("凤姐2号找你的钱多");
增加一个售票窗口的话只需在工厂类增加一条选择代码即可。
如果需要成龙售票时唱歌,这是需要增加一个唱歌接口,让成龙继承。
class 成龙 implements conductor,sing
实现简单代码如下:
interface conductor{
void sell();
void change();
}
interface sing{
void song();
}
class 凤姐 implements conductor{
public void sell(){
System.out.println("凤姐只卖飞机票");
}
public void change(){
System.out.println("凤姐找你的钱");
}
}
class 凤姐2 extends 凤姐{
public void change(){
System.out.println("凤姐2号找你的钱多");
}
}
class 春哥 implements conductor{
public void sell(){
System.out.println("春哥只卖火车票");
}
public void change(){
System.out.println("春哥找你的钱");
}
}
class 成龙 implements conductor,sing{
public void sell(){
System.out.println("成龙只卖汽车票");
}
public void change(){
System.out.println("成龙大哥找你的钱");
}
public void song() {
System.out.println("美丽的神话");
}
}
class 李刚 implements conductor{
public void sell(){
System.out.println("李刚只卖高铁票");
}
public void change(){
System.out.println("刚哥找你的钱");
}
}
class Fanctor{
static conductor creat(String type){
if(type.equals("airplane")){
return new 凤姐2();
}else if(type.equals("car")){
return new 成龙();
}else if(type.equals("train")){
return new 春哥();
}else if(type.equals("high-speed rail")){
return new 李刚();
}else
return null;
}
}
public class Test {
public static void main(String[] args){
conductor s = Fanctor.creat("airplane");
s.sell();
s.change();
sing c = (sing)s;
c.song();
}
}