面向对象-抽象类

简单认识抽象类 

 

 

//抽象类
public   abstract class A {
    //抽象方法,必须使用 abstract修饰,没有方法体
       public  abstract  void  run();
       //抽象类中该有的构造器跟构造方法都有
       private  String name ;
       private  static String schoolname;

    public A() {
    }

    public A(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static String getSchoolname() {
        return schoolname;
    }

    public static void setSchoolname(String schoolname) {
        A.schoolname = schoolname;
    }
}
//一个类继承了抽象类,必须重写完抽象类的全部抽象方法,否则自己也要是抽象类
public abstract class B extends A {

            @Override
    public   void run()
            {

            }
}
public class Test {
    public static void main(String[] args) {
               //抽象类中不能创建对象
             // A a =new A();
    }
}

接口只能定义抽象方法不能实现方法,抽象类既可以定义抽象方法,也可以实现方法。 

// 抽象类 Animal
abstract class Animal {
    // 抽象方法,没有方法体,必须由子类实现
    abstract void makeSound();

    // 具体方法,已经实现了
    void sleep() {
        System.out.println("This animal is sleeping.");
    }
}
// 具体类 Dog 继承自 Animal
class Dog extends Animal {
    // 实现抽象方法
    @Override
    void makeSound() {
        System.out.println("The dog barks.");
    }
}

// 具体类 Cat 继承自 Animal
class Cat extends Animal {
    // 实现抽象方法
    @Override
    void makeSound() {
        System.out.println("The cat meows.");
    }
}

// 主类,测试抽象类和具体类
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();
        
        myDog.makeSound();  // 输出: The dog barks.
        myDog.sleep();      // 输出: This animal is sleeping.
        
        myCat.makeSound();  // 输出: The cat meows.
        myCat.sleep();      // 输出: This animal is sleeping.
    }
}

 

 

 

 抽象类的好处

 在这个例子中父类的cry没有调用所以可以将父类进行抽象类这样就直接进行抽象重写

//抽象类
public abstract class Animal {
    private  String name;
          public  abstract   void cry();
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Cat extends Animal{

    @Override
    public void cry() {
        System.out.println(getName()+"喵喵叫");
    }
}

public class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println(getName()+"汪汪汪");
    }
}
public class Test {
    public static void main(String[] args) {
                 Animal a =new Cat();//多态
                 a.setName("猫");
                 a.cry();
        System.out.println("-----------");
        Animal a2 =new Dog();
        a2.setName("狗");
        a2.cry();
    }
}

抽象类的常见应用场景:模板方法设计模式 

 

 快捷键:alt+enter直接进行抽象方法重写

注:模板方法尽量用final修饰。

public class Test {
    public static void main(String[] args) {
                 Student s =new Student();
                 s.write();
        System.out.println("-------------");
        Teacher t= new Teacher();
        t.write();
    }
}

public abstract class People {
    public final void  write()
    {
        System.out.println("\t\t《我的爸爸》");
        System.out.println(writemain());
        System.out.println("我爱我的爸爸");
    }
    //定义一个抽象方法用于装抽象
    public  abstract  String writemain();
}
public class Teacher extends  People{
    @Override
    public String writemain() {
        return "我是老师";
    }
}
public  class Student extends People
{
    @Override
    public String writemain() {
        return   "我是学生";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值