首页 > 其他分享 >抽象类、abstract关键字

抽象类、abstract关键字

时间:2022-11-15 00:45:30浏览次数:70  
标签:子类 void System public 关键字 抽象类 abstract

目录

abstract关键字

  1. abstract:抽象的
  2. abstract可以用来修饰的结构:类、方法
  3. abstract修饰类:抽象类

此类不能实例化
抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)
开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作

  1. abstract修饰方法:抽象方法

抽象方法只有方法的声明,没有方法体

  • 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
  • 若子类重写了父类中的所有的抽象方法后,此子类方可实例化
  • 若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
abstract class Creature{
	public abstract void breath();
}

abstract class Person extends Creature{
	String name;
	int age;
	
	public Person(){
		
	}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}	
	//不是抽象方法:
//	public void eat(){
//		
//	}
	//抽象方法
	public abstract void eat();
	
	public void walk(){
		System.out.println("人走路");
	}	
}

class Student extends Person{	

	public Student(String name,int age){
		super(name,age);
	}
	public Student(){
	}
	
	public void eat(){
		System.out.println("学生多吃有营养的食物");
	}
	@Override
	public void breath() {
		System.out.println("学生应该呼吸新鲜的没有雾霾的空气");
	}

abstract使用上的注意点:

  1. abstract不能用来修饰:属性、构造器等结构
  2. abstract不能用来修饰私有方法、静态方法、final的方法、final的类

抽象类的匿名子类

public class PersonTest {	
	public static void main(String[] args) {		
		method(new Student());//匿名对象		
		Worker worker = new Worker();
		method1(worker);//非匿名的类非匿名的对象		
		method1(new Worker());//非匿名的类匿名的对象		
		System.out.println("********************");		
		//创建了一匿名子类的对象:p
		Person p = new Person(){
			@Override
			public void eat() {
				System.out.println("吃东西");
			}
			@Override
			public void breath() {
				System.out.println("好好呼吸");
			}			
		};		
		method1(p);
		System.out.println("********************");
		//创建匿名子类的匿名对象
		method1(new Person(){
			@Override
			public void eat() {
				System.out.println("吃好吃东西");
			}
			@Override
			public void breath() {
				System.out.println("好好呼吸新鲜空气");
			}
		});
	}		
	public static void method1(Person p){
		p.eat();
		p.breath();
	}	
	public static void method(Student s){
		
	}
}

class Worker extends Person{
	@Override
	public void eat() {
	}
	@Override
	public void breath() {
	}	
}

抽象类的应用:模板方法的设计模式

public class TemplateTest {
	public static void main(String[] args) {		
		SubTemplate t = new SubTemplate();		
		t.spendTime();
	}
}

abstract class Template{	
	//计算某段代码执行所需要花费的时间
	public void spendTime(){		
		long start = System.currentTimeMillis();		
		this.code();//不确定的部分、易变的部分		
		long end = System.currentTimeMillis();	
		System.out.println("花费的时间为:" + (end - start));		
	}	
	public abstract void code();		
}

class SubTemplate extends Template{
	@Override
	public void code() {		
		for(int i = 2;i <= 1000;i++){
			boolean isFlag = true;
			for(int j = 2;j <= Math.sqrt(i);j++){				
				if(i % j == 0){
					isFlag = false;
					break;
				}
			}
			if(isFlag){
				System.out.println(i);
			}
		}
	}	
}

本文由mdnice多平台发布

标签:子类,void,System,public,关键字,抽象类,abstract
From: https://www.cnblogs.com/CGB1804Great/p/16891076.html

相关文章

  • 接口、interface关键字
    目录interface关键字接口的匿名实现类的对象接口的应用:代理模式JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法面试题:抽象类与接口有哪些异同?interface......
  • 代码块、final关键字
    目录代码块final关键字代码块代码块的作用:用来初始化类、对象代码块如果有修饰的话,只能使用static分类:静态代码块vs非静态代码块静态代码块: 内部可以有输......
  • static关键字
    static关键字static:静态的static可以用来修饰:属性、方法、代码块、内部类使用static修饰属性:静态变量(或类变量)属性,按是否使用static修饰,又分为:静态属性vs非静态属......
  • 多态性、instanceof关键字
    目录多态性向下转型instanceof关键字多态性理解多态性:可以理解为一个事物的多种形态。何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)多......
  • 重写、super关键字
    目录重写super关键字重写重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,......
  • C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
    命名空间概述在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的......
  • C++ explicit关键字详解
    C++编码时,可以通过构造函数将相应的数据类型转换成为C++类的对象,从某种程度来说给编码带来了方便,但并不是每次都正确,为了避免这种情况,C++提供了explicit关键字,相对于implic......
  • java——继承与多态——final关键字001
    final关键字概念与四种用法:          final关键字用于修饰类:             final关键字用于修饰成员方法:   ......
  • super 关键字
    super“可以看做”是直接父类对象的引用。可通过super来访问父类中被子类覆盖的方法或属性。使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。......
  • 访问权限修饰符、this关键字
    目录访问权限修饰符this关键字访问权限修饰符构造器构造器的作用:创建对象初始化对象的信息如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器......