学习Java第十五天--三个修饰符之abstract

9.三个修饰符

9.1 abstract

9.1.1 什么是抽象

  • 似是而非,像却又不是;具备某种对象的特征,但不完整; 生活中的抽象:
  • 比如在百度上搜索动物图片,搜索结果都是“动物”的子类对象,而没有“动物”对象;

不该被创建的对象:

public class TestAbstract {
	public static void main(String[] args) {
		Animal2 a = new Animal2();
	}
}
class Animal2{
	String breed;
int age;
	String sex;
	public Animal2() {}
	public void eat() {}
	public void sleep() {}
}
  • Animal仅是一种会吃会睡的对象,再无其他行为,不够具体、不够完整;
  • 程序是用来模拟现实世界,解决现实问题的,现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象。
  • 所以,Animal不应该被独立创建成对象;
  • 那么,如何限制这种对象的创建?

9.1.2 抽象类

  • 应用:abstract修饰类,此类不能new对象。
public class TestAbstract {
	public static void main(String[] args) {
		//Animal2 a = new Animal2();	Animal2是抽象的,无法实例化
	}
}
abstract class Animal2{
	String breed;
	int age;
	String sex;
	public Animal2() {}
	public void eat() {}
	public void sleep() {}
}
  • 被abstract修饰的类,称为抽象类;
  • 抽象类意为不完整的类,不够具体的类,抽象类对象无法独立存在,即不能new对象;

9.1.3 抽象类的作用

  • 作用:
    可被子类继承,提供共性属性和方法;
    可声明为引用,强制使用多态;
public class TestAbstract {
	public static void main(String[] args) {
		//Animal2 a = new Animal2();	Animal2是抽象的,无法实例化
		Animal2 a1 = new Dog2();
		Animal2 a2 = new Cat2();
	}
}
abstract class Animal2{
	String breed;
	int age;
	String sex;
	public Animal2() {}
	public void eat() {}
	public void sleep() {}
}
class Dog2 extends Animal2{}
class Cat2 extends Animal2{}
  • 抽象父类,可作为子类的组成部分,依附于子类对象存在,由父类共性+子类独有组成完整的子类对象;

9.1.4 抽象方法

不该被实现的方法:

abstract class Animal2{
	String breed;
	int age;
	String sex;
	public Animal2() {}
	public void eat() {
		System.out.println("动物在吃。。。");
	}
	public void sleep() {
		System.out.println("动物在睡。。。");
	}
}
class Dog2 extends Animal2{}//需求:Dog中的eat()应输出“狗在吃狗粮”
class Cat2 extends Animal2{}//需求:Cat中的eat()应输出“猫在吃猫粮”
  • 父类提供的方法很难满足子类不同需求,如不定义,则表示所以动物都不会吃、睡;如定义,略显多余,多数会被子类覆盖。
  • 方法声明必要,方法实现多余;
abstract class Animal2{
	String breed;
	int age;
	String sex;
	public Animal2() {}
	public abstract void eat();	//被abstract修饰的方法,抽象方法
	public void sleep() {}
}
class Dog2 extends Animal2{
	public void eat() {
		System.out.println("狗在吃猫粮");
	}
}
class Cat2 extends Animal2{
	public void eat() {
		System.out.println("猫在吃猫粮");
	}
}
  • 被abstract修改的方法,称为抽象方法。只有方法声明,没有方法实现({}的部分)。意为不完整的方法,必须包含着抽象类中。
  • 产生继承关系后,子类必须覆盖父类所以的抽象方法,否则子类还是抽象类;

9.1.5 总结

  • abstract修饰类:不能new对象,但可以声明引用;
  • abstract修饰方法:只有声明方法,没有方法实现。(需包含在抽象类中)
  • 抽象类中不一定有抽象方法,但有抽象方法一定是抽象类;
  • 子类继承抽象类后,必须覆盖父类所有的抽象方法,否则子类还是抽象类;
发布了34 篇原创文章 · 获赞 7 · 访问量 1301

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104448142
今日推荐