/**
* 抽象类:
* 1.什么是抽象类?
* 如果一个类表达的是一种抽象的概念,仅仅作为其他派生类的一个父类,主要功能的定义,具体的实现交给他的子类来做
* 2.语法
* 在class前面加上abstract就是一个抽象类
*
* 3.抽象类的特点:
* (1).抽象方法所在的类必须是抽象类
* (2).抽象类不能进行实例化(因为抽象类中包含抽象方法,所以不能用抽象类来实例化对象)
* (3).如果要实现一个抽象类,创建一个子类去继承这个抽象类
* (4).子类继承抽象类以后,必须重写抽象类里面所有的抽象方法(前提子类不是抽象类)
* (5).抽象类里面可以定义普通方法
* (6).抽象类可以定义构造方法(没有实例化对象的作用但是有初始化抽象类中属性的作用)
*
*
*
* 抽象方法:
* 在返回值前面加上abstract就是一个抽象方法
* 抽象方法的特点:
* 只能方法的定义,没有方法体
*
*
*/
Animal一个抽象的父类
//动物类
public abstract class Animal {
private String name;
//动物吃什么?因为动物吃什么这就是一个抽象的,因为我也不知道是什么动物
public abstract void eat();
public void walk(){
System.out.println("..");
}
public Animal(){
}
public Animal(String name){
this.name=name;
}
}
Cat类继承抽象的父类Animal,并重写父类里面的抽象方法。
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫爱吃鱼");
}
}
抽象类Dog继承抽象父类Animal,Animal中的抽象方法可以不用重写,因为Dog也是抽象类
//狗类
public abstract class Dog extends Animal {
//抽象方法
public abstract void sleep();
public Dog(String name){
super(name);
}
public Dog(){
}
}
Dog2Ha继承了抽象类Dog,Dog2Ha类中要重写Dog和Animal中的抽象方法。
public class Dog2Ha extends Dog {
@Override
public void sleep() {
System.out.println("二哈呼呼大睡");
}
@Override
public void eat() {
System.out.println("二哈吃狗粮");
}
}
TestAnimal,用多态的方式创建实例对象,编译阶段看对象左边,执行阶段看对象右边。
public class TestAnimal {
public static void main(String[] args) {
//Animal an=new Animal();因为动物也是一个抽象的,不具体的
//多态:父类的引用指向了子类
// Animal dog=new Dog();
// dog.eat();
Animal cat=new Cat();
cat.eat();
Dog dog=new Dog2Ha();
dog.eat();
dog.sleep();
}
}
运行结果
抽象类播放不同格式简单demo
//播放器类
public abstract class Player {
//播放的方法
public abstract void play(String file);
//停止
public void stop(){
System.out.println("播放停止.....");
}
}
AVI格式
public class AVI extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
MP4格式
public class MP4 extends Player{
@Override
public void play(String file) {
System.out.println("播放"+file+"视频.....");
}
}
RMVB格式
public class RMVB extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
WMN格式
public class WMN extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
main调用
public class TestPlayer {
public static void main(String[] args) {
//1.视频文件
String file="海王.mp4";
//2.获取视频文件的扩展名
//lastIndexOf():获取最后字符.的下标
int index=file.lastIndexOf(".");
//3.截取字符串,只保留扩展名
String str=file.substring(index+1);
Player player=null;
switch (str.toUpperCase()) {//把字母变成大写
case "MP4":
player=new MP4();
break;
case "AVI":
player=new AVI();
break;
case "WMN":
player=new WMN();
break;
case "RMVB":
player=new RMVB();
break;
default:
System.out.println("不支持此格式视频....");
break;
}
System.out.println("开始播放视频...........");
//调用播放视频的方法
player.play(file);
//休眠5秒
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//停止播放
player.stop();
}
}
运行截图