Java:抽象

抽象的表述:

像狮子,老虎,狗等都是动物具体的实例,而动物本身就是一个抽象概念;我们把不具体的功能叫做抽象方法,而一个类中有抽象方法,我们就把这个类叫做抽象类。

抽象类的特点:

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();
//  🐱抓🐀
 }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值