欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象类

程序员文章站 2022-04-01 10:15:25
...

抽象类概念

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分,用abstract关键字修饰。

首先我们来创建一个抽象类

abstract class Animal1{//创建一个抽象类
	abstract public void cry();//抽象方法 不做具体实现
	public void fun1(){//普通方法
		
	}
}

接下来对它进行操作

public class Test13 {
	public static void main(String[] args) {
		Animal1 a = new Animal1();//会报错!!!抽象类不能实例化一个对象
		
	}
}
Animal1是抽象的,无法直接进行实例化操作。当一个类实例化之后,就意味着这个对象可以调用类中的属性或者方法,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。

抽象方法被继承

class Dog1 extends Animal1{

	@Override
	public void cry() {//实现它的抽象方法
		// TODO Auto-generated method stub
		System.out.println("wang wang!!!1");
	}
	
}

继承抽象类的时候必须实现它的抽象方法,但是如果此类也是抽象类的话可以不实现

abstract class Cat1 extends Animal1{
	abstract public void cry();//不可以实现这个抽象方法  
}

1,抽象类必须被public protected修饰,因为如果被private修饰的话,就不能被继承,如果不被继承就无法实现它的抽象方法。(缺省情况下默认为public)

2,抽象类不能直接实例化,但可以通过向上转型来进行实例化

abstract class Animal1{//创建一个抽象类
	abstract public void cry();//抽象方法 不做具体实现
	public void fun1(){//普通方法
		
	}
}
class Dog1 extends Animal1{

	@Override
	public void cry() {
		// TODO Auto-generated method stub
		System.out.println("wang wang!!!1");
	}
	
}

public class Test13 {
	public static void main(String[] args) {
		//Animal1 a = new Animal1();//抽象类不能实例化一个对象
		Animal1 a = new Dog1();//向上转型
		a.cry();
	}
}
3,抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类; 

4,子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

5,抽象类能否用static修饰

抽象类

用static修饰会报错

class A{
	abstract static class Animal1{//创建一个抽象类
		abstract public void cry();//抽象方法 不做具体实现
		public void fun1(){//普通方法
			
		}
	}
}
class Dog1 extends A.Animal1{

	@Override
	public void cry() {
		// TODO Auto-generated method stub
		System.out.println("wang wang!!!1");
	}
	
}

public class Test6 {
	public static void main(String[] args) {
		//Animal1 a = new Animal1();//抽象类不能实例化一个对象
		A.Animal1 a = new Dog1();
		a.cry();
	}
}

但是内部抽象类可以用static修饰!!!!


(穿插一点被final修饰的类和方法的内容)

被final修饰的类不能被继承

抽象类

被final修饰的方法不能被修改

抽象类

final修饰的类可以防止有意的派生