概述
抽象类,其实就是在类的前面加上一个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学习之抽象类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复