定义抽象类 Animal
package com.zthl.abstracts;
/*
* 1、抽象类中可以没有抽方法;
* 2、抽象类中既可以有抽象方法,也可以有普通方法;
* 3、一个类中只要有一个抽象方法,那么这个类就必须是抽象类;
* 4、一个类继承一个抽象类必须重写所有的抽象方法,否则这个类就是抽象类;
* 5、抽象类可以作为参数传递;
* 6、当方法的参数是抽象类或者接口时,调用这个方法需要抽象类的子类或者接口的实现类。
*/
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
public void classes(){
System.out.println("所有动物组成一个动物世界!");
}
}
package com.zthl.entity;
import com.zthl.abstracts.Animal;
public class Dog extends Animal {
private static final String DOG = "旺财";
@Override
public void eat() {
System.out.println(DOG+",喜欢吃骨头!");
}
@Override
public void sleep() {
System.out.println(DOG+",睡在狗窝里!");
}
public void privateBehavior(){
System.out.println(DOG+",嗅觉灵敏,可以被训练为警犬!");
}
}
Cat 类继承抽象类 Animal
package com.zthl.entity;
import com.zthl.abstracts.Animal;
public class Cat extends Animal {
/**
* 1、static修饰的数据在一个对象中修改后,共享数据区中的数据就会被修改;
* 2、final修饰的变量、方法、类不可被修改;
* 3、static final修饰的数据为常量。
*/
private static final String CAT = "喵喵";
@Override
public void eat() {
System.out.println(CAT+",平时睡在房梁上!");
}
@Override
public void sleep() {
System.out.println(CAT+",特别喜欢吃鱼!");
}
public void privateBehavior(){
System.out.println(CAT+",会抓老鼠!");
}
}
测试类 TestDog
package com.zthl.Test;
import org.junit.Test;
import com.zthl.abstracts.Animal;
import com.zthl.entity.Dog;
public class TestDog {
@Test
public void testA() {
Animal a=new Dog();
a.eat();
a.sleep();
a.classes();
//旺财,喜欢吃骨头!
//旺财,睡在狗窝里!
//所有动物组成一个动物世界!
}
@Test
public void testD() {
Dog d=new Dog();
d.eat();
d.sleep();
d.privateBehavior();
d.classes();
//旺财,喜欢吃骨头!
//旺财,睡在狗窝里!
//旺财,嗅觉灵敏,可以被训练为警犬!
//所有动物组成一个动物世界!
}
}
测试类 TestCat
package com.zthl.Test;
import org.junit.Test;
import com.zthl.abstracts.Animal;
import com.zthl.entity.Cat;
public class TestCat {
@Test
public void testA() {
Animal a=new Cat();
a.eat();
a.sleep();
a.classes();
//喵喵,平时睡在房梁上!
//喵喵,特别喜欢吃鱼!
//所有动物组成一个动物世界!
}
@Test
public void testc() {
Cat c=new Cat();
c.eat();
c.sleep();
c.privateBehavior();
c.classes();
//喵喵,平时睡在房梁上!
//喵喵,特别喜欢吃鱼!
//喵喵,会抓老鼠!
//所有动物组成一个动物世界!
}
}
抽象类可以作为参数传递
package com.zthl.Test;
import com.zthl.abstracts.Animal;
import com.zthl.entity.Dog;
/*
* 5、抽象类可以作为参数传递
*/
public class TestParam {
public static void main(String[] args) {
TestParam tp=new TestParam();
tp.est(new Dog());
//旺财,喜欢吃骨头!
}
public void est(Animal a){
a.eat();
}
}