抽象的表述:
像狮子,老虎,狗等都是动物具体的实例,而动物本身就是一个抽象概念;我们把不具体的功能叫做抽象方法,而一个类中有抽象方法,我们就把这个类叫做抽象类。
抽象类的特点:
1、抽象方法和抽象类都要用一个关键字修饰:abstract;
修饰一个类:放在class前面:abstract class 类名{}
修饰一个方法:放在权限修饰符后面:public abstract void show();
2、有抽象方法的类一定是抽象类,抽象类不一定有抽象方法,具体的类不可以有抽象的方法,抽象类既可以有抽象方法也可以有具体方法体的方法。
3、抽象类不能被实例化:
通过多态的形式,使用具体的子类去实例化调用方法:多态抽象
4、如果继承抽象类的是一个具体的子类,需要重写该抽象类中所有的抽象方法,如果继承抽象类的类是一个抽象类,则可以不用重写,或者选择性重写
abstract class Animal1{
public abstract void eat();
public abstract void drink();
}
class Dog1 extends Animal1{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void drink() {
System.out.println("狗喝水");
}
}
public class Abstract1 {
public static void main(String[] args) {
Animal1 animal1=new Dog1();
animal1.eat();
animal1.drink();
}
}
教师案例:
具体事物:第一位老师,第二位老师
共性:姓名,年龄,讲课
abstract class Techer {
private int age;
private String name;
public Techer() {
}
public Techer(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void teach();
}
class FristTeacher extends Techer {
public FristTeacher() {}
public FristTeacher(int age, String name) {
super(age, name);
}
@Override
public void teach() {
System.out.println(this.getName()+this.getAge()+","+"教数学");
}
}
class SecondTeacher extends Techer {
public SecondTeacher() {}
public SecondTeacher(int age, String name) {
super(age, name);
}
@Override
public void teach() {
System.out.println(this.getName()+this.getAge()+","+"教英语");
}
}
public class Abstract2 {
public static void main(String[] args) {
Techer techer=new FristTeacher(20,"小白");
techer.teach();
Techer techer1=new SecondTeacher(18,"小黑");
techer1.teach();
}
}
学生案例:
具体事物:第一个学生,第二个学生;
共性:名字,年龄,学习科目
package com.one;
abstract class Student{
private String name;
private int age;
public Student(){}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void study();
}
class FristStudent extends Student{
public FristStudent(){}
public FristStudent(String name,int age){
super(name, age);
}
@Override
public void study() {
System.out.println(getName()+getAge()+","+"学数学");
}
}
class SecondStudent extends Student{
public SecondStudent(){}
public SecondStudent(String name,int age){
super(name, age);
}
@Override
public void study() {
System.out.println(getName()+getAge()+","+"学语文");
}
}
public class Abstact3 {
public static void main(String[] args) {
Student student=new FristStudent("大白",18);
student.study();
// 大白18,学数学
Student student1=new SecondStudent("大黑",19);
student1.study();
// 大黑19,学语文
}
}
猫和老鼠升级版:
abstract class Animal2{
public abstract void eat();
public abstract void action();
}
class Dog2 extends Animal2{
@Override
public void eat() {
System.out.println("🐕吃🥩");
}
@Override
public void action() {
System.out.println("🐕看🚪");
}
}
class Cat2 extends Animal2{
@Override
public void eat() {
System.out.println("🐱吃🐟");
}
@Override
public void action() {
System.out.println("🐱抓🐀");
}
}
public class Abstract4 {
public static void main(String[] args) {
Animal2 animal2=new Dog2();
animal2.eat();
// 🐕吃🥩
animal2.action();
// 🐕看🚪
Animal2 animal21=new Cat2();
animal21.eat();
// 🐱吃🐟
animal21.action();
// 🐱抓🐀
}
}