黑马程序员技术交流社区

标题: 总结一下这周学面向对象的知识 [打印本页]

作者: 664941114    时间: 2016-7-15 21:47
标题: 总结一下这周学面向对象的知识
1.继承:子类继承父类,只继承非private修饰的成员(成员变量和成员方法)
       继承的优点提高了代码的复用性
  class Animal /*extends Object*/{
    private String name;//name被private 修饰不被 Sheep继承

    public void eat(){
            System.out.println("吃东西");
    }
    public String getName(){
      return name;
    }
    public String setName(String name){
            this.name=name;
    }

  }

  class Sheep extends Animal{
    //private String name; //Sheep中可以通过从父类继承的getter/setter方法来使用父类的name属性
                           //子类不用在重新定义name属性
   // public void eat(){
   //         System.out.println("吃东西");
   // }
  }
  注意事项:
   1.Java只支持单继承(C++支持多继承)
   2.所有类都直接或间接继承Object类
   3.只有一个类没有父类就是Object类


2.方法的重写:前提条件一定得有继承关系
             重写子类基于父类非private的方法,目的为了提供比父类的方法更强的功能
  class Father{
    public void goWork(){//上班
      System.out.println("骑自行车上班");
    }
    private void method1(){

    }

    public void method2(int i){

    }

    public void method3(){

    }

    public Father method4(){

    }
  }
  class Son extends Father{
          @Override //强制重写父类的goWork()方法,没有重写就编译报错
    public void goWork(){//上班
      System.out.println("搭乘火箭去上班");
    }

    public void method(){//该方法属于Son特有的方法不是从父类继承


    }


    @Override
    public void method1(){//private修饰的方法不能被继承,也不能被重写


    }

    @Override//强制要求重写
             //如果去掉 @Override,继承method2(int) 与子类的 method2() 构成重载
    public void method2(){ //参数列表不同不构成重写,编译报错


    }

    public int method3(){//返回值为基本数据类型不够成重写关系,也不构成重载关系,编译报错
            return 0;
    }

    public Son method4(){//子类方法的返回值类型(Son)继承父类的方法的返回值类型(Father),也构成重写
           
    }
  }
  重写与重载:
  重载:
    权限修饰符(public private 默认):无关
    方法名:重载的两个方法的方法名必须相同
    形参列表:
      形参类型的顺序不同
      形参的个数不同
      形参的类型不同
      三者至少满足一个
    返回值类型:
      重载与返回值类型无关
   重写:
    权限修饰符(public private 默认):
      子类方法的权限>=父类的方法的权限
    方法名:
      子类方法和父类方法必须相同
    形参列表:
       子类方法和父类方法的形参列表必须相同
    返回值类型:
     基本类数据类型:
        必须相同
     引用数据类型:
       子类方法的返回值类型和父类方法的返回值类型相同
       或者
       子类方法的返回值类型(Son) 是 父类方法的返回值类型(Father)的 子类
3.抽象类:
  abstract class Shape{//Shape被abstract修饰无法new对象
     public abstract double getArea();//由于形状不确定,我们无法利用公式求出形状的面积
                             //无法确定getArea()的方法体,因此把getArea()设计成抽象

  }
  class CircleShape extends Shape{
          private double r;
          private double pi=3.14;
          @Override
          public double getArea(){
         return pi*r*r;
          }
  }
  class TriangleShape extends Shape{
                  private double h;
                  private double di;
                  @Override
                  public double getArea(){
                 return 0.5*di*h;
                  }
  }
  抽象类的注意事项:
    1.抽象类不能创建对象
    2.含有抽象方法一定是抽象类
    3.抽象类既可以含有抽象方法也可以含有非抽象方法
    4.抽象类中可以没有一个抽象方法(应用:GUI的 适配器设计模式)

4.接口:是一种约束/规范(USB接口),额外功能拓展
  abstract class Animal{
    private String name;
    public abstract void eat();
    // public void swim(){//并不是所有的动物都会游泳
    //         System.out.println("游泳")
    // }
  }
  interface  Swim{//接口中的方法都是抽象方法

                        //游泳相对于动物继承体系来说是额外的功能
     public abstract void swim();
  }
  class QingWa extends Animal implements Swim{   
          public  void eat(){

          }
          public void swim(){
                  System.out.println("蛙泳");
          }
  }
  class Dog extends Animal implements Swim{
          public  void eat(){
                 
          }
    public void swim(){
            System.out.println("狗刨");
    }
  }
  class Bird extends Animal{
          public  void eat(){
                 
          }
  }
  注意事项:
   1.类不能继承接口,接口可以继承多个接口
   2.类不能继承多个类,但是类可以实现多个接口
   3.接口中的方法都有public abstract
             变量都有public static final ,改变量是一个常量,定义的时候就必须初始化


作者: 呆呆的小呆    时间: 2016-7-15 22:09
顶顶顶顶顶顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2