zoukankan      html  css  js  c++  java
  • 初学者——面向对象的理解03

    什么叫做继承

    继承是Java中实现代码重要的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。简单点来说就是继承是类和类之间的关系。

    为什么要使用继承

    提升代码的复用性
    减少代码的冗余

    继承的创建

    class 子类 extends 父类

    extends关键字实现类的继承

    super关键字

    (1)使用super关键字,super代表父类对象
    (2)在子类构造方法中调用且必须是第一句
    (3)不可以访问父类中定义为private的属性和方法

    继承条件下构造方法的调用规则

    1. 子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法系统默认调用父类的无参构造方法
    2. 子类构造方法通过super显式调用父类的有参构造方法,执行父类相应构造方法,而不执行父类无参构造方法
    3. 子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则
    private String varieties;//品种
      public Dog(String name, int health, int love,String varieties) {
            super(name, health, love);//显示调用父类构造 放在第一位
            this.varieties=varieties;
        }

    子类与父类的关系

    子类可以继承父类的任何非私有成员(变量  方法 构造) 

    子类永远比父类拥有更多的成员 子>父

    方法重写规则

    • 参数列表相同
    • 方法名相同
    • 返回值类型相同或者是其子类
    • 访问权限不能严于父类
    • 父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
    • 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
    • 父类的私有方法不能被子类覆盖
    • 不能抛出比父类方法更多的异常

     方法重写vs方法重载

    方法重写原则

    除了方法体不同以外,其余所有(返回类型,返回值,参数)完全一致

     abstract抽象类

    有抽象方法的类一定是抽象类

    抽象类不一定有抽象方法

    抽象类不能被实例化   例如 Pen pen=new Pen();不能实例化

    抽象类的子类可以是普通类,该普通类要实现抽象类中的抽象方法

    抽象类的子类也可以是抽象类,此时,父类中的抽象方法可以在子类中不被实现

    封装中get和set使用

    get:获取字段的值 函数返回值类型===>字段的类型

    set:给字段设置值 函数的参数===>字段的类型

    //获取数据
    public String getName() {
            return name;
        }
            //添加数据
        public void setName(String name) {
            this.name = name;
        }

    Object类被子类经常重写的方法

    构造函数

    一个类在没有编写构造函数的情况下默认存在一个无参构造 如果用户编写了 默认存在的就消失了

    构造函数是没有返回值类型的

    构造函数的执行时机:是在类的实例化的过程中,会自动调用构造函数

    作用:完成类的成员变量的初始化

    public Person() {
        }//这就是系统默认的构造函数即使不创建也会存在

     什么是多态

    同一个引用类型,使用不同的实例而执行不同操作

    发生在具有继承关系的实体中,不同实体为了完成同一操作(函数名)所采取的不同方式(方法体)。

    里氏替换原则(Liskov Substitution Principle)

       在出现超类的位置上,可以使用其子类对象 解释一下:
    (由于,子类比父类更优秀,出现父类的任何位置,子类都可以使用)

    现实多态的三种方式

    1. 父类类型接收子类对象实现的多态
    2. 父类类型作为方法形参
    3. 父类类型作为方法返回值

    向上向下转型

       向上转型:子类对象--->父类做的转换 无需强转(没有异常)

    Pet pet=new Dog("小白", 50, 89, "阿拉斯加");
            pet.showInFo();//向上转型自动转换


       向下转型:父类类型--->子类类型转换 需要强转,使用instanceof比较两个类型避免发生(ClassCastException)异常

    Pet pen=new Penguin("小红", 50, 90, "Q妹");
            if(pen instanceof Penguin){//用 instanceof比较避免出现异常
            Penguin peng=(Penguin)pen;//需要强制转换
            peng.eat();
            }else {
                System.out.println("您输入的不准确");
            }

    值类型和引用类型

    值类型:八种基本数据类型

    引用数据类型:Object

    值传递

    将栈上的数据Copy一份

    引用类型的值传递会改变

    值类型的值传递不会改变

    Java中只支持值传递

    努力到无能为力,拼搏到感动自己
  • 相关阅读:
    嗨!亲爱的朋友们,欢迎您光临我的BLOG
    SQL里的各种语句语法
    2000/XP登陆后自动注销解决办法(WORM_FUNNER.A)
    ASP程序加密解密方法全面解析
    双击硬盘盘符打不开文件的处理方法
    关于rs.Open sql,conn语句
    C# 图片被占用资源无法删除或者修改,转换成数据流解决
    asp.net div 使用
    鼠标移到控件上显示,移出控件消失
    C# 文件关联 (jpg等图片格式为例)
  • 原文地址:https://www.cnblogs.com/tkzm/p/10950576.html
Copyright © 2011-2022 走看看