zoukankan      html  css  js  c++  java
  • 第五章:面向对象3

    面向对象的三大特征

    封装

    封装:广义上的封装就是包装,可以将方法看作是对为完成特定功能的代码的封装,可以把类看作对属性和方法的封装....
    狭义上的封装:将属性私有化,然后提供公有的getter和setter方法以供访问。

    4种修饰符

    public修饰符

    项目下所有的类都能使用

    preotected修饰符

    本类,同包下的其他类或其他包下子类

    默认的(default/friendly)

    本类中访问
    同包下其他类访问

    private修饰符

    只能在本类中访问


    继承

    定义

    继承代表了一种is-a关系,如果说A是B,也就可以说A继承了B
    父类更加通用
    子类更加具体
    优点:提高代码的复用性。


    继承实现

    java中实现继承使用extends关键字

    [修饰符] class 类名 extends 父类{

    }

    子类可以继承父类的非私有的属性和方法。
    子类不能继承父类的构造方法。
    java中继承是属于单继承,一个类只能有一个父类,但是一个父类可以有多个子类。
    C++中可以存在多继承,java可以通过接口实现多继承。


    方法的重写

    方法的重写(override):一般发生在父子之间,子类重写的方法应该满足以下条件
    * 1.子类的方法名,返回值类型,参数列表必须与父类相同
    * 2.子类的修饰符范围>=父类的修饰符范围
    * 修饰符范围:public>protected>默认>private
    * 重载:方法名相同,参数列表不同
    * 重写(override)和重载(overload)区别:
    * 1.重写一般发生在父子之间,重载一般在同一个类中。
    * 2.重写要求方法名,返回值类型,参数列表必须与父类相同,并且修饰符范围大于等于父类方法的修饰符范围。
    * 重载方法名相同,参数列表不同,与返回值类型及修饰符无关。
    * 3.作用不同。
    * 重载主要是为了提供一种同名方法不同参数的能力(可以让一个类用于多个同名的方法)
    * 重写主要是为了结合多态使用,提高程序扩展性和可维护性。
    *
    * 注意:一旦子类重写了父类中的方法,创建子类实例后,调用子类重写后的方法。


    super关键字

    *super关键字:代表直接父类的引用,类别this关键字进行记忆。
    *用法:
    *1.可以使用super关键字访问父类的属性: super.属性名
    *2.使用super关键字访问父类的方法:super.方法名()
    *3.使用super关键字调用父类的构造方法,但是必须作为构造方法的第一行语句存在。
    *注意:在静态方法中不能使用super和this关键字。


    Object类

    java.lang.Object类:所有类的基类
    *一个类如果没有显式使用extends继承其他类,这个类继承了Object类,在任何类的对象中使用Object中的方法
    *public class Student{
    *}
    *public class Student extends Object{
    *}
    *常用的方法:
    * getClass() 返回此 Object 的运行时类。主要用于反射机制。
    * toString() 返回该对象的字符串表示。如果使用System.out.println(stu);默认调用stu.toString()
    * cn.zzsxt.oop6.Student@26ffd553==》
    * cn.zzsxt.oop6.Student(包名.类名)+@+16进制表示的hashcode码
    * toString()方法经常在子类中重写。


    父子类中代码的执行过程

    * 父类和子类中代码的执行顺序
    * 静态代码块在使用类时执行。
    * 普通代码块在创建对象时执行。
    * 父类的静态代码块>子类静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法
    * 在创建子类时,先调用父类的构造方法先创建父类的实例,在创建子类的实例。


    equals和==的区别

    * ==和equals的区别
    * ==在比较内容时分为以下两种情况:
    * 1.使用==比较基本数据类型,做的值的比较,值相同返回true,否则返回false
    * 2.使用==比较引用类型,比较不是内容是否相同,而是两个对象的引用(地址)是否相同,
    * 如果指向相同的地址返回true,否则返回false。
    * equals():比较内容是否相同。
    * Object中的equals方法本质比较引用(==),如果需要按照内容进行比较是否相同,
    * 就需要重新Object中equals方法。


    多态

    生活中的多态:同一种物质,因环境不同而展现不同的形态。
    比如:水在不同环境下可以展现为固态,液态和气态。
    程序中的多态:同一种接口因不同的实现而执行不同的操作


    多态优点

    提高了代码的可扩展性和可维护性
    多态在java中实现

    在java中多态,继承和方法重写密不可分,在编译时经常将父类类型作为形参,在运行时将具体的子类作为实参,执行的子类重写后的方法。


    类型转换

    向上转型(将子类转换为父类),自动转化

    当利用父类创建子类时发生了向上转型
    1.上转型对象不能操作子类新增的成员变量和方法。
    2.上转型对象可以操作子类继承或重写的成员变量和方法
    3.如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。


    向下转型(将父类转换为子类),强制转换


    instanceof运算符

    * instanceof运算符: 判断对象是否为指定类型的实例。如果是指定类型的实例返回值为true,否则返回false
    * 语法: 对象 instanceof 类型
    * 防止在类型转换时出现ClassCastException异常。
    * if(a instanceof Cat){
    * Cat c=(Cat)a;
    * }

  • 相关阅读:
    Docker 网络
    Dockerfile你值得拥有
    Spring boot配置成功后,出现Whitelabel Error Page的解决办法
    ubuntu 创建快捷方式
    Ubuntu Make来安装Visual Studio Code
    ubuntu16.04开机自动挂载Windows分区
    ubuntu下使用罗技Unifying
    酷开电视升级后无法启动
    ArcGIS 10.2安装错误,Error: Internal Error 2753. The File is not marked for installation
    ubuntu16.04下使用wine 运行微信开发小程序
  • 原文地址:https://www.cnblogs.com/panwenshuai/p/6973539.html
Copyright © 2011-2022 走看看