最近遇到一个这样的面试题,不知道如何回答是好,请高人指点面试抽象类和接口,java

解决方案 »

  1.   

    给LZ举个现实生活中的例子吧:电脑主板有好多PCI插槽对吧,主板厂商联合显卡声卡等指定了个规则,只要你的显卡,声卡等符合我主板的规则,那你就能在我的主板上运行,,这时候就需要定义接口,因为规则是统一的,但是具体怎么实现,主板商不知道也不需要知道,这个由其他的声卡,显卡厂商去实现,这就是接口。抽象类:当多个类中出现相同功能,但是功能主体不同,
    这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。
    抽象类的特点:
    1,抽象方法一定在抽象类中。
    2,抽象方法和抽象类都必须被abstract关键字修饰。
    3,抽象类不可以用new创建对象。因为调用抽象方法没意义。
    4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
    如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
    抽象类和一般类没有太大的不同。
    该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
    这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。
    通过抽象方法来表示。抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
    抽象类不可以实例化。
    特殊之处:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。抽象类:/*
    需求:
    假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
    姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
    奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
    法进行属性访问。员工类:name id pay经理类:继承了员工,并有自己特有的bonus。
    */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 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("manager work");
    }
    }class Pro extends Employee
    {
    Pro(String name,String id,double pay)
    {
    super(name,id,pay);
    }
    public void work()
    {
    System.out.println("pro work");
    }
    }
    class  
    {
    public static void main(String[] args) 
    {
    System.out.println("Hello World!");
    }接口:/*
    需求:
    电脑运行实例,
    电脑运行基于主板。
    */
     
     
    interface PCI
    {
        public void open();
        public void close();
    }
     
    //主板
    class MainBoard
    {
        public void run()
        {
            System.out.println("mainboard run ");
        }
     
        //这个方法就是说只要你实现了PCI接口你就能"插在我身上"
        //PCI p = new NetCard(),接口型引用指向自己的子类对象,同理网卡也是
        //注:你还可以建立更多的对象实现PCI接口丰富电脑配置
        public void usePCI(PCI p)
        {
            //这里的P代表你传给他哪个对象,他就代表哪个对象对应的方法
            if(p!=null)
            {
                p.open();
                p.close();
                 
            }
        }
    }
     
    //网卡实现了PCI接口复写了他的方法
    class NetCard implements PCI
    {
        public void open()
        {
            System.out.println("netcard open");
        }
        public void close()
        {
            System.out.println("netcard close");
            method();
        }
         
    }
     
    //声卡实现了PCI接口复写了他的方法
    class SoundCard implements PCI
    {
        public void open()
        {
            System.out.println("SoundCard open");
        }
        public void close()
        {
            System.out.println("SoundCard close");
        }
    }
     
    class MainBoardTest 
    {
        public static void main(String[] args) 
        {
            MainBoard mb = new MainBoard();
            mb.run();
            mb.usePCI(null);
            mb.usePCI(new NetCard());
            mb.usePCI(new SoundCard());
             
        }
    }
      

  2.   

    http://www.cnblogs.com/healerkx/articles/1233252.html前后几章都要看。
      

  3.   

    http://www.cnblogs.com/healerkx/articles/1233252.html
      

  4.   

    根据实际情况来定,首先抽象类是必定要给别人来继承的,这就是它存在的意义,其次,java不支持多继承,只能一对一的继承,但是java却可以同时实现多个接口,比如你定义了一个动物类,这个类既想有猫的动作,又想有狗的动作,那么你就可以用这个类去同时实现猫和狗的接口,抽象类个人认为它和多态联系更紧密一下,比如你定义了一个球类为抽象类,那么去继承它的可以是篮球、足球等等,那么在你以后写的代码中,你就可以更具需要去决定到底是用它的篮球子类还是足球子类。以上为个人理解,可能说的不太明白。
      

  5.   


    你理解错误了你还是看我的blog吧
    Cat,Dog不可能是接口(准确说,拿这种意义的东西当接口,不好)你注意一下,Java的接口命名规范,50%以上都是able结尾的。这说明问题的~~~
      

  6.   

    抽象类 --> 模板
    接口   -->标准