zoukankan      html  css  js  c++  java
  • 抽象类与接口

    1.抽象类

       (1)抽象类:含有抽象方法的类,抽象类一定是父类,有构造方法,不能实例化。

       (2)抽象类与抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类不一定含有抽象方法。当不希望这个类被创建对象时,可以将这个类定义为抽象类,此时不含抽象方法。

       (3)抽象类与普通类的区别:

        相同点:都是类,都在描述事物

        不同点:A.抽象类不能创建对象,普通类可以

            B.抽象类可以含有抽象方法,普通类不能含有抽象方法

     (4)抽象类的特点:

              A.抽象类不能创建对象(实例化),因为含有抽象方法----若能实例化,它就会调用抽象方法,而抽象方法没有实现,所以不可以

        B.继承了抽象类的子类,没有重写父类中的抽象方法,那么该子类还是抽象类  

       (5)abstract不能和哪些关键字同用:

        A.final:修饰的方法不能被重写,abstract:修饰的方法必须被重写

        B.static:修饰的方法可以通过类名调用,abstract:修饰的方法不能通过类名调用(不能实例化)

        C.private:修饰的方法不可以被重写(private作用范围为本类,重写要在另一个类中进行),abstract:修饰的方法必须被重写

      (6)代码展示

       

     1 /**
     2  * 抽象类的特点:
     3  * 1.抽象类不能创建对象(实例化),
     4  *   因为含有抽象方法----若能实例化,它就会调用抽象方法,而抽象方法没有实现,所以不可以
     5  * 2.继承了抽象类的子类,没有重写父类中的抽象方法,那么该子类还是抽象类
     6  *
     7  */
     8 
     9 //计算圆形,矩形的面积
    10 abstract class Shape{
    11     public abstract double getArea();
    12     
    13 }
    14 abstract class Circle extends Shape{
    15     private double radius;
    16     Circle(double radius){
    17         this.radius = radius;
    18     }
    19     //继承了父类的抽象方法,含有抽象方法,
    20     // 如果没有重写该抽象方法,那么该类也是抽象类
    21     //public abstract double getArea();
    22 }
    23 
    24 class Rectangle extends Shape{
    25     private double length;
    26     private double width;
    27     public Rectangle(double length,double width) {
    28         this.length = length;
    29         this.width = width;
    30     }
    31     public double getArea(){
    32         return length*width;
    33     }
    34 }
    35 public class AreaTest {
    36 
    37     public static void main(String[] args) {
    38         //Shape s = new Shape();抽象类不能实例化
    39         
    40         Rectangle r = new Rectangle(4.0, 3.0);
    41         System.out.print(r.getArea());
    42     }
    43 
    44 }

        

     1 /**
     2  *需求:公司中的程序员有姓名,工号,薪水,工作内容
     3  *项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
     4  *对给出需求进行数据建模 
     5  * 
     6  *
     7  */
     8 
     9 abstract class Employee{
    10     private String name;
    11     private String id;
    12     private double money;
    13     
    14     public Employee(){}
    15     
    16     public Employee(String name,String id,double money){
    17         this.name = name;
    18         this.id = id;
    19         this.money = money;
    20     }
    21     
    22     public abstract void work();
    23 }
    24 
    25 class Programmer extends Employee{
    26     public Programmer(){}
    27     public Programmer(String name,String id,double money){
    28         super(name,id,money);
    29     }
    30     public void work(){
    31         System.out.println("写代码");
    32     }
    33 }
    34 
    35 class Manager extends Employee{
    36     private double bonus;//奖金
    37     public Manager(){}
    38     public Manager(String name,String id,double money,double bonus){
    39         super(name,id,money);
    40         this.bonus = bonus;
    41     }
    42     public void work(){
    43         System.out.println("管理程序员");
    44     }
    45 }
    46 public class AreaTest {
    47 
    48     public static void main(String[] args) {
    49         // TODO Auto-generated method stub
    50         Programmer p = new Programmer("张三","001",1000.0);
    51         p.work();
    52         
    53         Manager m = new Manager("李四","002",1000.0,1000.0);
    54         m.work();
    55         
    56     }
    57 
    58 }

    2.接口

     (1)定义形式
      interface 接口名
       {
         全局常量(public static final)
         抽象方法(public abstract)
       }

      (2)接口是可以多实现的

      因为接口中的方法都是抽象的,都没有实现,在创建子类对象并调用该重写的抽象方法时很明确
      就是调用重写之后的方法,不会出现调用的不确定性

      接口解决了java单继承的问题

    interface inter1{
    	public static final int Num = 25;
    	public abstract void show();
    }
    
    interface inter2{
    	public abstract void fun();
    	public abstract void show();
    }
    
    class MyTest implements inter1,inter2{
    	@Override
    	public void show() {
    		System.out.println("show");
    		
    	}
    
    	@Override
    	public void fun() {
    		// TODO Auto-generated method stub
    		
    	}
    }
    
    public class InterfaceTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		MyTest test = new MyTest();
    		test.show();
    		
    		System.out.println(test.Num);
    		System.out.println(MyTest.Num);
    		System.out.println(inter1.Num);
    
    	}
    
    }
    

      运行结果:   

        show
        25
        25
        25

    3.抽象类与接口的区别:

    一个类在继承的同时还可以去实现接口
     类和类之间是继承的关系
     类和接口之间是实现的关系


     通过继承可以得到该继承体系的基本功能
     通过实现接口可以得到继承体系之外的功能


     接口和接口之间是继承的关系,而且多继承
       interface inner1{}
       interface inner2{}
       interface inner3 extends inner1,inner2,inner3{}

  • 相关阅读:
    第七次作业-正规式到正规文法与自动机
    第六次作业——正规文法与正规式
    作业5 词法分析程序的设计与实现
    作业4—文法和语言总结与梳理
    第三次作业
    第二次作业-语言和文法
    编译原理第一次作业
    记录在腾讯云上搭建Ubuntu服务器
    第八章总结--排序 数据结构课程终章
    第七章-查找
  • 原文地址:https://www.cnblogs.com/langdon/p/6297791.html
Copyright © 2011-2022 走看看