JavaSE之抽象类与接口

1、抽象类的使用

abstract class Person{
    private String name ; // 属性
    public String getName(){ // 普通方法
        return this.name;
    }
    public void setName(String name){
        this.name = name ;
    }
    // {}为方法体,所有抽象方法上不包含方法体
    public abstract void getPersonInfo() ; //抽象方法
}
class Student extends Person{
    public void getPersonInfo(){
        System.out.println("I am a student");
    }
}
public class Test{
    public static void main(String[] args) {
        Person per = new Student() ; //实例化子类,向上转型
        per.getPersonInfo() ; //被子类所覆写的方法
    }
}

2、抽象类中定义构造方法

abstract class Person{
    private String name ; // 属性
    public Person(){ //构造方法
        System.out.println("**********");
    }
    public String getName(){ // 普通方法
        return this.name;
    }
    public void setName(String name){
        this.name = name ;
    }
    // {}为方法体,所有抽象方法上不包含方法体
    public abstract void getPersonInfo() ; //抽象方法
}
class Student extends Person{
    public Student(){ //构造方法
        System.out.println("##########");
    }
    public void getPersonInfo(){
//空实现。
    }
}
public class Test{
    public static void main(String[] args) {
        new Student();
    }
}

3、定义一个简单接口

interface IMessage {
	public static final String MSG = "I am a biter" ; // 全局常量
	public abstract void print() ; // 抽象方法
}

4、子类实现接口和父接口间的相互转换

interface IMessage{
	public static final String MSG = "I am a biter" ; // 全局常量
	public abstract void print() ; // 抽象方法
}
interface INews {
	public abstract String getNews() ;
}
class MessageImpl implements IMessage,INews {	
	public void print() {
		System.out.println(IMessage.MSG) ;
	}
	public String getNews(){
		return IMessage.MSG ; // 访问常量建议加上类名称
	}
}
public class Test{
	public static void main(String[] args) {
		IMessage m = new MessageImpl() ; 
		//子类向上转型,为父接口实例化对象
		m.print() ; // 调用被子类覆写过的方法
		INews n = (INews) m ;
		System.out.println(n.getNews()) ;
	}
}

5、子类继承抽象类和实现接口

interface IMessage {
    public void print() ;
}
abstract class News {
    // 抽象类中方法前面的abstract不能省略,否则就是普通方法
    public abstract void getNews() ;
}
class MessageImpl extends News implements IMessage {
    public void print() {
        System.out.println("I am a biter") ;
    }
    public void getNews() {
        System.out.println("I am News") ;
    }
}
public class Test{
    public static void main(String[] args) {
        IMessage m = new MessageImpl() ;
        m.print() ;
// MessageImpl是抽象类和接口的共同子类
        News news = (News) m ;
        news.getNews() ;
    }
}

6、一个接口继承多个接口

interface A {
    public void printA() ;
}
interface B {
    public void printB() ;
}
interface C extends A,B { // 接口多继承
    public void printC() ;
}
class Impl implements C{
    public void printA() {}
    public void printB() {}
    public void printC() {}
}
public class Test {
    public static void main(String[] args) {
    }
}

7、工厂设计模式

interface IFruit { // 定义一个描述吃水果的操作
    public void eat() ; // 吃水果
}
class Factory {
    // 此时Factory产生实例化对象没有意义,对外提供工具方法
    public static IFruit getInstance(String className){
        if ("apple".equals(className)) {
            return new Apple() ;
        }
        if ("watermelon".equals(className)) {
            return new Watermelon() ;
        }
        return null ;
    }
}
class Apple implements IFruit {
    public void eat() {
        System.out.println("吃苹果前需要洗");
    }
}
class Watermelon implements IFruit {
    public void eat() {
        System.out.println("吃西瓜前需要切");
    }
}
public class Test{
    public static void main(String[] args) {
        if (args.length==0) { // 没有传递参数
            System.out.println("没有传递参数,程序退出") ;
            System.exit(1) ; // 退出程序
        }
        IFruit fruit = Factory.getInstance(args[0]) ;
        fruit.eat() ;
    }
}

8、代理设计模式

interface ISubject {
    public void buyComputer() ; // 核心功能是买电脑
}
class RealSubject implements ISubject {
    public void buyComputer() {
        System.out.println("买一台外星人电脑") ;
    }
}
class ProxySubject implements ISubject {
    private ISubject subject ; // 真正的操作业务
    public ProxySubject(ISubject subject) {
        this.subject = subject ;
    }
    public void produceComputer() {
        System.out.println("1.生产外星人电脑") ;
    }
    public void afterSale() {
        System.out.println("3.外星人电脑售后团队") ;
    }
}

相关文章:

  • 2021-12-02
猜你喜欢
  • 2021-06-10
  • 2021-06-13
  • 2022-12-23
  • 2021-09-11
  • 2021-10-06
  • 2021-08-05
  • 2021-10-25
相关资源
相似解决方案