zoukankan      html  css  js  c++  java
  • Java学习个人备忘录之抽象类

    抽象类

    特点:
    1. 方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中。该类必须也被abstract修饰
    2. 抽象类不可以被实例化. 为什么?  因为调用抽象方法没意义。
    3. 抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。

    abstract class 犬科
    { 
    	abstract/*抽象*/ void show();
    }//抽象方法所在的类也必须的抽象的.
    
    class 狗 extends 犬科
    {
    	void 吼叫()
    	{
    		System.out.println("汪汪");
    	}
    }
    
    class 狼 extends 犬科
    {
    	void 吼叫()
    	{
    		System.out.println("嗷嗷");
    	}
    }
    
    class AbstractDemo
    {
    	public static void main(String[] args)
    	{
    
    	}
    }


    细节理解:

    1. 抽象类中有构造函数吗?
    有,用于给子类对象进行初始化.

    2. 抽象类可以不定义抽象方法吗?
    可以,但是很少见,目的就是不让该类创建对象. AWT的适配器对象就是这种类.
    通常这个类中的方法有方法体,但是却没有内容.

    abstract class Demo
    {
    	void show1()
    	{}
    
    	void show2()
    	{}
    }

    3. 抽象关键字不可以和哪些关键字共存?
    private  因为抽象方法要被覆盖
    static  有它就不需要创建对象
    final 不能被继承

    4. 抽象类和一般类的区别
    相同点:
    抽象类和一般类都是用来描述事物的,都在内部定了成员。
    不同点:
      1. 一般类有足够的信息描述事物,抽象类描述事物的信息有可能不足。
      2. 一般类中不能定义抽象方法,抽象类中可以定义抽象方法。
      3. 一般类可以被实例化,抽象类不可以被实例化。


    5. 抽象类一定是个父类吗?
    是的,因为需要子类覆盖其方法后才可以对子类实例化。

    雇员示例:
    需求: 公司中程序员有姓名,工号,薪水,工作内容。
    项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
    对给除需求进行数据建模。

    分析:
    在这个问题领域中,先找出涉及的对象。
    通过名词提炼法。
    程序员:
    属性: 姓名,工号,薪水
    行为: 工作
    经理:
    属性: 姓名,工号,薪水,奖金
    行为: 工作

    程序员和经理不存在着直接继承关系,
    但是程序员和经理却具有共性内容。
    可以进行抽取. 因为他们都是公司的雇员。

    可以将程序员和经理进行抽取,建立体系。

    描述雇员

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


    描述程序员

    class Programmer extends Employee
    {
    	Programmer(String name,String id,double pay)
    	{
    		super(name,id,pay);
    	}
    	public void work()
    	{
    		System.out.println("code....");
    	}
    }


    描述经理

    class Manager extends Employee
    {
    	private int bonus;
    	Manager(String name,String id,double pay,int bonus)
    	{
    		super(name,id,pay);
    		this.bonus = bonus;
    	}
    	public void work()
    	{
    		System.out.println("manage");
    	}
    }
    我是Vector,谢谢关注。
  • 相关阅读:
    Nginx的启动、停止与重启
    linux环境下安装nginx步骤
    关于Nginx的负载均衡
    【Nginx】实现动静分离
    nginx中的反向代理
    Nignx的简介
    ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'orderite
    mysql出现“ You can't specify target table '表名' for update in FROM clause”解决方法
    SpringMvc的工作原理图
    【Java多线程】Java中的13个原子操作类(十九)
  • 原文地址:https://www.cnblogs.com/vector121/p/7470521.html
Copyright © 2011-2022 走看看