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.外星人电脑售后团队") ;
}
}