目
录
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 不能共存 无意义(静态方法不参与重写)
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!