第十一次课
一.
package com.hpe.demo;
/**
- 抽象类:
- 1.什么是抽象类?
- 如果一个类表达的是一种抽象的概念,仅仅作为其他派生类的一个父类,主要功能的定义,具体的实现交给
- 他的子类来做
- 2.语法
- 在class前面加上abstract就是一个抽象类
- 3.抽象类的特点:
- (1).抽象方法所在的类必须是抽象类
- (2).抽象类不能进行实例化
- (3).如果要实现一个抽象类,创建一个子类去继承这个抽象类
- (4).子类继承抽象类以后,必须重写抽象类里面所有的抽象方法(前提子类不是抽象类)
- (5).抽象类里面可以定义普通方法
- (6).抽象类可以定义构造方法
- 抽象方法:
- 在返回值前面加上abstract就是一个抽象方法
- 抽象方法的特点:
- 只能方法的定义,没有方法体
*/
//动物类
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;
}
}
二.
package com.hpe.demo;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫爱吃鱼");
}
}
三.
package com.hpe.demo;
//狗类
public abstract class Dog extends Animal {
//抽象方法
public abstract void sleep();
public Dog(String name){
super(name);
}
public Dog(){
}
}
四.
package com.hpe.demo;
public class Dog2Ha extends Dog {
@Override
public void sleep() {
System.out.println("二哈呼呼大睡");
}
@Override
public void eat() {
System.out.println("二哈吃狗粮");
}
}
五.
package com.hpe.demo;
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();
}
}
另一个文件夹
一.
package com.hpe.demo1;
public class CommonEmployee extends Employee {
public CommonEmployee(){
}
public CommonEmployee(int id,String name,int salary){
super(id, name, salary);
}
@Override
public void work() {
System.out.println("普通员工正在工作");
}
}
二.
package com.hpe.demo1;
public abstract class Employee {
private int id;
private String name;
private int salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public Employee() {
super();
}
public Employee(int id, String name, int salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
//工作
public abstract void work();
}
三.
package com.hpe.demo1;
public class Manager extends Employee {
private int bonus;//奖金
public int getBonus() {
return bonus;
}
public void setBonus(int bonus) {
this.bonus = bonus;
}
public Manager(int bonus,int id,String name,int salary) {
super(id,name,salary);
this.bonus = bonus;
}
public Manager() {
super();
}
@Override
public void work() {
System.out.println("管理员工工作。。。");
}
@Override
public String toString() {
return "Manager [bonus=" + bonus + "]";
}
}
四.
package com.hpe.demo1;
public class TestEmployee {
public static void main(String[] args) {
//多态
Employee manager=new Manager(5000, 1001, "张三", 20000);
System.out.println("id:"+manager.getId()+",name:"+manager.getName()+
",salary:"+manager.getSalary()+manager);
manager.work();
Employee ce=new CommonEmployee();
ce.work();
}
}
在另一个文件夹
一.
package com.hpe.demo2;
public class AVI extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
二.
package com.hpe.demo2;
public class MP4 extends Player{
@Override
public void play(String file) {
System.out.println("播放"+file+"视频.....");
}
}
三.
package com.hpe.demo2;
//播放器类
public abstract class Player {
//播放的方法
public abstract void play(String file);
//停止
public void stop(){
System.out.println("播放停止.....");
}
}
四.
package com.hpe.demo2;
public class RMVB extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
五.
package com.hpe.demo2;
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();
}
}
package com.hpe.demo2;
public class WMN extends Player {
@Override
public void play(String file) {
System.out.println("播放"+file+"视频......");
}
}
最后一个文件夹
一
package com.hpe.demo3;
public class TestTraffic {
public static void main(String[] args) {
// Traffic t=new Traffic();
}
}
二.
package com.hpe.demo3;
/**
- 1.什么是接口?
- (1).就是多个类之间的公共规范
- (2)接口就是一个特殊的抽象类型,接口里面的方法都是抽象方法
- (3).接口解决了java单继承的鸡肋
- 2.怎么定义一个接口
- public interface 接口名{
- }
*3.接口的特点
*(1)接口里面的属性都是常量,默认会给你加上“public static final”修饰
*(2)接口里面的方法都是抽象方法,默认会给你加上“public abstract”进行修饰
*/
//交通工具类
public interface Traffic {
// int age=10;//常量
// public static final int Age1=10;
public abstract void start();//这是一个抽象方法
abstract void add();//这也是一个重新方法
public void run();//这是一个抽象方法
void stop();//这也是一个抽象方法
}