JAVASE抽象方法,接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myloveprogrmming/article/details/83023878

一抽象类

1抽象类的产生

当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体。

但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢?

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

2抽象方法定义的格式:

public abstract 返回值类型 方法名(参数);

抽象类定义的格式:

abstract class 类名 {

}

abstract class Animal{
	public abstract void cry();//叫声  
}
class Cat extends Animal {
	public void cry() {
		System.out.println("喵喵");
	}
}
class Dog extends Animal{
	public void cry() {
		System.out.println("汪汪");
	}
}
public class Test4 {
	public static void main(String[] args) {
		Cat c=new Cat();
		c.cry();
		Dog d=new Dog();
		d.cry();
	}

}

输出:
喵喵
汪汪
 

3抽象类的特点

a、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。

b、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。

c、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单

4抽象类的细节问题

a、抽象类一定是个父类?

是的,因为不断抽取而来的。

b、抽象类中是否可以不定义抽象方法。

是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用

 

 

 

 

 

 

抽象类中可以没有抽象方法,但是该类也不能被实例化,也就是说不能new,抽象方法必须在抽象类中。

抽象方法:用abstract修饰的方法(注:抽象方法只有方法声明没有方法体,抽象方法必须在抽象类中,抽象类不能被实例化,不管里面有没有抽象方法),但是抽象类中的构造方法和普通类的构造方法相同,没有什么特殊的,抽象类中的构造方法是供子类构造方法使用的),子类继承该抽象类,会继承父类的抽象方法,要重写它的抽象方法(实现了方法的真正的功能)。如果子类值只重写了部分父类的构造方法,子类还是抽象类(因为里面含有抽象方法),必须用abstarct修饰(注:抽象类是不能创建对象的。

问题1没有抽象方法的抽象类是否可以创建对象?

//不能。抽象类是不能实例化对象的
abstract class A{
	public void f() {
		System.out.println("f()");
	}
}
public class Test2 {

	public static void main(String[] args) {
		A a=new A();//报错
	}

}

猜你喜欢

转载自blog.csdn.net/myloveprogrmming/article/details/83023878