Java中抽象类的实例化、继承一些细节问题的记录

  • 抽象类是由abstract修饰的类,它不能被实例化,但是它也是有构造方法的,只要是类就有构造方法;
  • 抽象类如何变为“实体类”,这里所说的实体类就是可以new出对象的类,我知道只有一种方法,让一个普通类继承这个抽象类,并实现抽象类的抽象方法;
  • 一个类继承一个抽象类,当这个类被abstract修饰时,它可以不用继承抽象类的抽象方法,但是它不能被实例化,因为有未被完成的方法;
  • 一下是代码实例:
  1. 创建一个抽象类:
    /**
     * @author 橙橙橙。
     * 2019年3月24日
     * 描述:创建一个抽象类
     */
    
    public abstract class Father {
    	
    	public Father() {
    	}
    
    	//创建两个抽象方法
    	public abstract void eat();
    	public abstract void work();
    }

    2、写一个类,给它前面加abstract关键字,再让它继承这个Father类;

    /**
     * @author 橙橙橙。
     * 描述:SubClass继承Father类,但并不实现它的抽象方法
     * 划重点:一个抽象类继承一个抽象类,可以不用重写继承的抽象类的抽象方法;
     */
    public abstract class SubClass extends Father{
    	
    	public SubClass() {
    	}
    }

    3、我们来new一下SubClass类;

    /**
     * @author 橙橙橙。
     *描述:在没有实现Father类抽象方法的情况下,new SubClass类就必须实现Father的抽象方法;
     */
    
    public class Test {
    	public static void main(String[] args) {
    		SubClass class1 = new SubClass() {
    
    			@Override
    			public void eat() {
    				// TODO Auto-generated method stub
    			}
    			@Override
    			public void work() {
    				// TODO Auto-generated method stub
    			}
    		};
    	}
    }

    划重点:

          Q:为什么在抽象子类中可以不实现抽象父类的抽象方法?

          A:因为都是抽象类,父类可以保留的方法在抽象子类中也可以保留,子类与父类具有相同的性质;

          Q:为什么在new子类的时候需要实现抽象方法?

          A:因为new就代表创建一个对象,一般情况下,实体类才会创建对象,这里的实体类可以这样理解:没有未实现的方法,是一个独立完整的个体。而SubClass并不是一个独立完整的个体,它还有父类未实现的方法。所以,在它创建对象的时候,必须将它变成实体类。

如果大家觉得我理解有偏差,特别欢迎在评论区指点一二,感激不尽~

4、当SubClass继承Father类,并实现Father类的抽象方法;

/**
 * @author 橙橙橙。
 * 描述:SubClass继承Father类,但并不实现它的抽象方法
 * 划重点:一个类继承一个抽象类,并且实现抽象类的抽象方法;
 */
public class SubClass extends Father{
	
	public SubClass() {
	}
	
	@Override
	public void eat() {
		System.out.println("这是吃饭的方法~");
	}

	@Override
	public void work() {
		System.out.println("这是睡觉的方法~");
	}
}

5、使用SubClass创建一个实例;

public class Test {
	public static void main(String[] args) {
		SubClass class1 = new SubClass();
		class1.eat();
		class1.work();
	}

大家可以看到,这次SubClass成功简洁的创建了对象,为什么呢?当然是它在继承Father类时,实现了抽象类的抽象方法,所以它已经是一个完整独立的实体类了!

运行结果如下:

写完了,欢迎大家提问题,找问题,一起讨论问题~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值