浅谈抽象类abstract

抽象类

包含抽象方法的类叫做抽象类。抽象类不允许直接创建实例,只能有子类提供方法实现后才能通过子类创建对象
抽象方法就是值没有方法体的方法,方法只做一个声明,没有具体的实现。抽象方法必须在子类中提供具体的实现。

抽象类中可以包含抽象方法,不是必须包含抽象方法

public abstract class Vehicle{
	//方法是由具体的实现的,不过是空实现,不会没有方法体
	public void pp(){}
	//抽象方法
	public abstract void func();
}

抽象类不能直接进行new操作,只能定义具体实现的子类然后进行new操作

public abstract class Vehicle{}
//具体类必须实现继承抽象类中的所有抽象方法,否则这个类还是抽象类
public class Car extends Vehicle{}

public class Test{
	Vehicle v = new Car();
}

抽象类和普通类一样可以定义成员方法和成员属性,以及构造器和析构器。知识抽象类允许包含抽象方法,普通类继承抽象类,必须将抽象类中的所有抽象具体实现

public abstract class Animal{
    private String name;
    protected int age;
    //构造器
    public Animal(){}
    public Animal(int age){}
    //成员方法
    public void sleep(){
        System.out.println("正在睡觉");
    }
    public abstract void walk();//子类若不是抽象类必须对该方法进行实现
}

abstract class Pig extends Animal{
    //针对walk方法没有提供实现这个份方法也是抽象类
}

class SmallPig extends Pig{
    public void walk(){}//允许对方法进行空实现
}

抽象类的特点

  • 方法只声明而没有具体的实现则方法就是抽象方法
  • 抽象方法只能使用范围限定词中的public\protected\package默认,不能使用private
  • 不允许定义抽象构造器public abstract Animal();
//1.抽象类中可以定义构造器也可以不定义构造器,由系统自动提供默认的无参构造器,但是如果自己定义构造器,不允许对构造器使用private范围限定词
abstract class Parent{
	private Parent(){}
}
class Son extends Parent{
//语法报错:因为父类的构造器是private,所以Son在构建对象是不能通过super()调用父类构造器}

//2.如果需要定义私有构造器,则必须提供带参的非私有的构造器
abstract class Parent{
	private Parent(){}
	public Parent(int age){
		//this();调用自身无参构造器
	}
}
  • 抽象类或者抽象方法不允许被final修饰
    final修饰的类不允许继承,则不能定义子类
    方法不允许子类中覆盖定义,所以不能定义final抽象方法
  • 抽象类中可以定义静态方法
public lass Test{
	public static void main(String[] args){
		Parent.func();//不能创建Parent对象来调用方法
		Parent p = new Son();
		s.func();
	}
}

abstract class Parent{
	public static void func(){
		System.out.println("Parent func()方法")
	}
}

//不允许定义抽象静态方法
abstract class Parent{
	public static abstract void func();
}
//可以使用抽象类直接调用静态方法
  • 抽象类不能直接创建对象,只能通过继承的方式定义子类,然后创建子类对象。子类对象可以赋值个抽象类声明的变量Animal animal = new Dog();
  • 抽象类中除了可以抽象方法,也可以有非抽象方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值