目      录

absract可以修饰类和方法

抽象方法

抽象类

抽象类的特点

abstract不能和哪些关键字共存?


absract可以修饰类和方法

  • 抽象类格式:    abstract class 类名 {}
  • 抽象方法格式:    public abstract void eat();

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

抽象方法

        抽象方法只需要给出所有子类的共性功能的声明,而不给出功能的具体实现,而是交由子类,按照自身的差异性,去重写。(也就是没有方法体且前面有absrtact修饰的方法就是抽象方法!)父类的抽象方***强制子类必须重写。非抽象方法一般,就是让子类继承下去直接用,当然子类可以重写,但是不带有强制性。

那么问题来啦!java中凡是没有方法体的方法都是抽象方法吗?不是的!首先得有abstract修饰.其次,在Object类中有许多方法没有方法体并以";"结尾的方法.这些方法都是调用C++底层代码来实现的!

抽象类

抽象类: 类与类则之间具有共同特征,将这些共同特征提取出来形成的类就是抽象类!   

抽象类的语法:  [修饰符列表]  abstract  class  类名{     }   

抽象类里面既可以定义抽象方法,也可以定义非抽象方法。抽象类主要用来被子类继承的!

public abstract class Animal {            //抽象类父类
    
    //抽象方法(子类必须重写)
    public abstract void eat();

    public abstract void sleep();
    
    //非抽象方法。
    public void show() {
        System.out.println("fu show");
    }
}

//Cat类继承Animal
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void sleep() {
        System.out.println("猫白天睡觉");
    }
}

//Dog类继承Animal
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗爱吃骨头");
    }

    @Override
    public void sleep() {
        System.out.println("狗爱在狗窝里数据");
    }

}

抽象类的特点

  • 抽象类和抽象方法必须用abstract关键字修饰.
  • 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类. 一旦一个类中有了抽象方法,此类必须为抽象类.这个类中如果没有定义抽象方法,仍然可以把这个类定义为抽象类,这样可以让外界无法直接创建该类对象。
  • 抽象类不能直接创建对象,因为抽象类是类与类之间抽取出来的共同特征,而类本身就是抽象的现实中不存在的,所以抽象类不能实例化!但是我们可以通过多态的方式,间接实例化这个抽象类.
  • 作为抽象类的子类,他有两种选择:1.子类必须重写抽象类中的所有抽象方法2.子类也变为抽象类。
  • 抽象类中,有构造方法,可以让子类可以通过多态的方式,间接实例化这个抽象类
  • 抽象类中,可以定义成员变量,也可以定义常量
  • 抽象类属于引用数据类型

abstract不能和哪些关键字共存?

  • private   冲突(私有的不能被其它类访问)
  • final       冲突(final修饰的类不能被继承,final修饰的方法不能被重写)
  • static     不能共存 无意义(静态方法不参与重写)

 

(小编也在努力学习更多哟!以后会多多分享哒!)

希望对友友们有所帮助!!!!