我是靠谱客的博主 伶俐茉莉,最近开发中收集的这篇文章主要介绍Java学习之抽象类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

抽象类,其实就是在类的前面加上一个abstract,一定注意是在类的前面,如果将abstract关键字声明在类的后面就会报错。抽象类主要在模板类中使用,之前C++的时候也学过模板类,但已经 忘得差不多了,主要的功能是在父类中先声明一下abstract方法,再子类中再进行重写,如果abstract类的不重写会报错。声明抽象方法的类也必须是抽象类,所以在类的前面也要加abstract关键字,这就体现出了模板的样子。

笔记:

package oop.abstract_test;
/*
 * 
 * abstract关键字使用
 * anstract有一个作用是提示要对父类中的方法进行重写。
 * 1.abstract:抽象的
 * 2.abstract可以用来修饰类、方法	
 * 
 * 3.abstract修饰类:抽象类
 * 			>此类不能实例化
 * 			>抽象类中一定有构造器,便于子类对象实例化的时候调用
 * 			>开发中都会提供抽象类的子类,让抽象类的子类实例化,完成相关操作
 * 4.abstract修饰方法:抽象方法
 * 			>抽象方法只有方法的声明,没有方法体
 * 			>包含抽象方法的类一定是抽象类,反之,抽象类中的方法可以没有抽象方法。
 * 			>若子类重写了父类中的所有抽象方法,则子类可以实例化。
 * 			>若子类没有重写了父类中的所有抽象方法,则子类也是一个抽象类,需要用abstract修饰
 * 5.使用上的注意点:abstract不能修饰属性、构造器等结构
 * 					abstract不能用来修饰私有方法、静态方法、final方法、final的类
 */
public class AbstractTest {
	public static void main(String[] args) {
		//Cannot instantiate the type Person 一旦Person类被抽象了,便不可以实例化
//		Person p1=new Person();
//		p1.eat();
	}

}

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

class Student extends Person{
	
	public void eat() {
		System.out.println("学生要吃有营养的食物");
	}

	@Override
	public void walk() {
		// TODO Auto-generated method stub
		
	}
}

例子;

package oop.abstract_test;

public abstract class Employee {

	private String name;
	private int id;
	private double salary;
	
	public Employee() {
		
	}
	public Employee(String name,int id,double salary)
	{
		this.name=name;
		this.id=id;
		this.salary=salary;
	}
	
	public abstract void work();

}
package oop.abstract_test;

public class Manager extends Employee{
	
	private double bonus;//奖金
	
	
	public Manager(double bonus) {
		super();
		this.bonus = bonus;
	}
	
	
	public Manager(String name, int id, double salary, double bonus) {
		super(name, id, salary);
		this.bonus = bonus;
	}


	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("管理员工,提供运行效率");
		
	}
	
}
package oop.abstract_test;

public class EmployeeTest {
	public static void main(String[] args) {
		
		//多态
		Employee manager=new Manager("Tom", 1001, 1000, 1000);
		manager.work();
		CommonEmployee commonEmployee = new CommonEmployee();
		commonEmployee.work();
	}
}

抽象类的应用:匿名子类(个人感觉不太重要)

package oop.abstract_test;
/*
 * 抽象类匿名子类的使用
 * 
 */
public class PersonTest {
	public static void main(String[] args) {
		
		method(new Student());//匿名对象
		worker worker1=new worker();
		method1(worker1);//非匿名的类,非匿名的对象
		method1(new worker());//非匿名的类 ,匿名对象
		
		//创建了一个匿名子类的对象p
		Person p=new Person() {

			@Override
			public void eat() {
				// TODO Auto-generated method stub
				System.out.println("好好吃饭");
			}

			@Override
			public void walk() {
				// TODO Auto-generated method stub
				System.out.println("好好走路");
			}
			
		};
		method1(p);
		System.out.println("***************");
		//创建匿名子类的匿名对象
		method1(new Person() {

			@Override
			public void eat() {
				// TODO Auto-generated method stub
				System.out.println("吃好吃的东西");
			}

			@Override
			public void walk() {
				// TODO Auto-generated method stub
				System.out.println("好好看路,走路");
			}
			
		});
	}
	

	
	public static void method1(Person p)
	{
		p.walk();
		p.eat();
	}
	public static void method(Student s)
	{
		
	}
}



class worker extends Person{
	

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void walk() {
		// TODO Auto-generated method stub
		
	}
	
	
}

抽象类的应用:模板方法设计模式(这个感觉还是有用处的)

package oop.abstract_test;
/*
 * 抽象类的应用:模板方法的设计模式
 * 
 */
public abstract class TemplateTest {

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

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


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

最后

以上就是伶俐茉莉为你收集整理的Java学习之抽象类的全部内容,希望文章能够帮你解决Java学习之抽象类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部