栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习之抽象类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习之抽象类

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

笔记:

package oop.abstract_test;

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);
			}
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号