抽象类是什么东西?

什么是类

  • 什么是类?

类是一个模板,描述了一类对象的行为和状态。

  • 什么是对象?

对象是类的实例,具有行为和状态。
例如:一只猫就是一个对象,他有品种、颜色、性别等状态;会叫、跑、吃等行为。

类的基本结构:

[修饰符] class 类名{
	0到多个构造器
	0到多个成员变量
	0到多个方法
	0到多个初始化块
}
  • 修饰符可以写public final abstract或者不写。
  • java类名要用驼峰命名法(即每个单词的首字母大写)。
  • 一个java源文件(也就是文件后缀名为.java的文件)可以写多个类,但是里面只能有一个用public修饰的class,
  • 什么是构造器(构造方法或者叫构造函数)

与类名相同,但是没有返回值。

public class TestController{
	TestController(){}//构造器
}
  • 构造器可以重载。
  • 默认会添加一个无参构造器。
  • 对象使用new关键字实例化时,jvm给对象分配内存,并初始化,对象的成员变量被设置为初始值;如果没有构造器,就要手动初始化所有的成员变量,以确保对象的数据是有意义的。在对象实例化的时候,构造器确保了对象的成员变量都是有意义的数据。

什么是抽象类

被abstract修饰的类叫做抽象类。

特点:

  • 抽象类不能实例化。可以借助子类实例化。
  • 抽象类中才能有抽象方法。抽象类中还可以有普通方法。
  • 构造方法和static修饰的方法不能是抽象的。
  • abstract不能与final并列修饰同一个类。
  • abstract 不能与private、static、final或native并列修饰同一个方法。

实例:
抽象类:

public abstract class Develop {
	public abstract void work();
	public abstract void motion();
	public abstract void eat();
}
//具体的子类:可以实例化对象
public class AbstractTest extends Develop{
    public static void main(String[] args) {
		//子类对象
		AbstractTest abstractTest =new AbstractTest ();
		abstractTest.work();
		abstractTest.motion();
		abstractTest.eat();
    }
 
	@Override
	public void work() {
		System.out.println("写程序");
	}
 
	@Override
	public void motion() {
		System.out.println("写完程序了去做会运动,放松一下吧");
	}
	
	public void eat() {
		System.out.println("做完运动饿了,吃点东西");
	}
 
}

运行结果:
写程序
写完程序了去做会运动,放松一下吧
做完运动饿了,吃点东西

注意:

Java中的抽象方法不能同时和static、final、private公用。原因如下:

  • static:在抽象类中定义抽象方法时是不能定义static(静态)的,否则编译器会报错,因为静态方法属于类,所以静态方法必须满足给类调用,而抽象方法是只能在子类中才能被调用的,所以两者同时使用冲突。
  • final:abstract修饰的类是需要子类继承的,abstract修饰的方法是需要子类重写的,但是final修饰的类不能被继承,final修饰的方法也不能被重写。
  • private:abstract修饰的方法必须通过子类重写才有效,而被private修饰的方法对子类不可见。

补充

类的加载顺序(JVM)

实例化类对象时,如果类里有代码块、静态代码块、构造方法、静态成员、非静态成员时,它们的加载顺序是:
静态成员/代码块→非静态成员/代码块→构造方法

public class TestMain {
 
       //实例化代码块.每次生成类实例,都会执行.并且,实例化代码块的执行 优先于 构造器.
       {
            System.out.println("这里是普通代码块");
       }
 
       //静态语句块,在类初始化时,仅仅执行一次.
        static{
            System.out.println("这里是静态代码块");
        }
 
        //类实例
        public static TestMain t1 = new TestMain();
 
        //构造器方法
        TestMain(){
            System.out.println("这里是构造器");
        }
 
        public static void main(String[] args)
        {
            //类实例
            TestMain t2 = new TestMain();
        }
}

运行结果:

这里是静态代码块
这里是普通代码块
这里是构造器
这里是普通代码块
这里是构造器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值