java 抽象类

Posted RoyFans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 抽象类相关的知识,希望对你有一定的参考价值。

/*
	抽象类的概述:
		动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。
		我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。
		
	抽象类的特点:
		A:抽象类和抽象方法必须用abstract关键字修饰
		B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
		C:抽象类不能实例化
			因为它不是具体的。
			抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
			用于子类访问父类数据的初始化
		D:抽象的子类
			a:如果不想重写抽象方法,该子类是一个抽象类。
			b:重写所有的抽象方法,这个时候子类是一个具体的类。
			
		抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
			Animal a = new Cat();
*/

//abstract class Animal //抽象类的声明格式
abstract class Animal {
	//抽象方法
	//public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体
	public abstract void eat();
	
	public Animal(){}
}

//子类是抽象类
abstract class Dog extends Animal {}

//子类是具体类,重写抽象方法
class Cat extends Animal {
	public void eat() {
		System.out.println("猫吃鱼");
	}
}

class AbstractDemo {
	public static void main(String[] args) {
		//创建对象
		//Animal是抽象的; 无法实例化
		//Animal a = new Animal();
		//通过多态的方式
		Animal a = new Cat();
		a.eat();
	}
}

  

/*
	抽象类的成员特点:
		成员变量:既可以是变量,也可以是常量。
		构造方法:有。
					用于子类访问父类数据的初始化。
		成员方法:既可以是抽象的,也可以是非抽象的。
		
	抽象类的成员方法特性:
		A:抽象方法 强制要求子类做的事情。
		B:非抽象方法 子类继承的事情,提高代码复用性。
*/
abstract class Animal {
	public int num = 10;
	public final int num2 = 20;

	public Animal() {}
	
	public Animal(String name,int age){}
	
	public abstract void show();
	
	public void method() {
		System.out.println("method");
	}
}

class Dog extends Animal {
	public void show() {
		System.out.println("show Dog");
	}
}

class AbstractDemo2 {
	public static void main(String[] args) {
		//创建对象
		Animal a = new Dog();
		a.num = 100;
		System.out.println(a.num);
		//a.num2 = 200;
		System.out.println(a.num2);
		System.out.println("--------------");
		a.show();
		a.method();
	}
}

  

/*
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
	A:可以。
	B:不让创建对象。

abstract不能和哪些关键字共存?
	private	冲突
	final	冲突	
	static	无意义
*/
abstract class Fu {
	//public abstract void show();
	//非法的修饰符组合: abstract和private
	//private abstract void show();
	
	//非法的修饰符组合
	//final abstract void show();	
	
	//非法的修饰符组合
	static abstract void show();
	
	public static void method() {
		System.out.println("method");
	}
}

class Zi extends Fu {
	public void show() {}
}

class AbstractDemo3 {
	public static void main(String[] args) {
		Fu.method();
	}
}

  

package day9;

import com.sun.prism.impl.paint.PaintUtil;
import org.omg.CORBA.PUBLIC_MEMBER;

/**
 * Created by admin on 2018/11/17.
 */
//定义员工类
abstract class Employee {
    private String name;
    private String id;
    private int salary;
    public Employee(){}
    public Employee(String name, String id, int salary){
        this.name = name;
        this.id = id;
        this.salary = salary;

    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }
    public abstract void work();
}

class Programmer extends Employee {
    public Programmer(){};
    public Programmer(String name, String id, int salary){
        super(name, id, salary);
    }
    public void work() {
        System.out.println("Write code");
    }
}
class Manager extends Employee {
    private int money;

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public Manager() {};
    public Manager(String name, String id, int salary, int money) {
        super(name,id,salary);
        this.money = money;
    }
    public void work(){
        System.out.println("跟客户谈需求");
    }

}
public class AbstractTest {
    public static void main(String[] args){
        //测试普通员工
        Employee emp = new Programmer();
        emp.setName("林青霞");
        emp.setId("czbk001");
        emp.setSalary(18000);
        System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());
        emp.work();
        System.out.println("-------------");
        emp = new Programmer("林青霞","czbk001",18000);
        System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());
        emp.work();
        System.out.println("-------------");

		/*
		emp = new Manager();
		emp.setName("刘意");
		emp.setId("czbk002");
		emp.setSalary(8000);
		emp.setMoney(2000);
		*/
        //由于子类有特有的内容,所以我们用子类来测试
        Manager m = new Manager();
        m.setName("刘意");
        m.setId("czbk002");
        m.setSalary(8000);
        m.setMoney(2000);
        System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());
        m.work();
        System.out.println("-------------");

        //通过构造方法赋值
        m = new Manager("刘意","czbk002",8000,2000);
        System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());
        m.work();

    }



}

  

以上是关于java 抽象类的主要内容,如果未能解决你的问题,请参考以下文章

Java 封装

elasticsearch代码片段,及工具类SearchEsUtil.java

Java 封装

Java 封装

Java 封装

Java 封装