• 面向对象(二)之三大特性


    面向对象的三大基本特征
      封装(封装方法)——代码复用,屏蔽细节。
      继承extends(类与类之间的一种关系)——代码复用,功能上的拓展。当一个子类继承了父类,就自动拥有了父类的所有成员变量。一个子类只能有一个父类,一个父类可以有多个子类。
      多态

    一、封装

    1、包:管理java软件,解决同名问题冲突,用不同的文件夹来区分不同的类,一般包名为小写

      系统中的包:java.(功能).(类)       

            java.lang.类,常用的基础类,不需要导包即可使用。(唯一的一个)
            java.io 输入输出流
            java.net 网络编程
            java.util 工具包

    2、访问修饰符

        

        private(私有)——只能在类的内部用
        default(默认)——在同一个包下的类之间可以使用
        protected(受保护的)——继承中可以互相调用,两个类不在同一个包下,若是继承关系可以调用
        public(公共的)——两个类不在同一个包下,是不是继承关系都可以调用

    3、内部类:定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

      内部类的主要作用如下:
        1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
        2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    • 成员内部类

       1、 内部类中定义的 方法可以直接访问 外部类中的数据,而不受访问控制符的影响
       2、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
       3、成员内部类也会生成 .class 文件,格式如下:外部类名$内部类名.class
       4、 外部类是不能直接使用内部类的成员和方法
       5、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字

    • 静态内部类

       1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
       2、如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果不相同,则可通过“成员名”直接调用外部类的静态成员
       3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    • 方法内部类

       方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,方法内部类不能使用访问控制符和 static 修饰符。

    • 匿名内部类:不注重类的名字,在使用时定义

      new IplayGame(){                  IplayGame  ip3 =new IplayGame(){

        public  void  playGame(){               public void playGame(){

          System.out.println("使用匿名内部类");          System.out.println("使用匿名内部类");

        }                            }

      }.playgame();                    }

                                 ip3.plalyGame();

    二、继承

      1、方法的重写,重写父类方法
        语法规则:返回值类型,方法名,参数类型及个数与父类相同。
      2、继承的初始化顺序
        先初始化父类再初始子类
        先初始化对象的属性,再执行构造函数的初始化
      3、final关键字
        修饰类,该类不允许被继承
        修饰方法,则方法不允许被覆盖
        修饰变量,则在声明时赋一次值,不允许改变(常量)
        修饰属性,初始化属性必须有值,或在构造函数中赋值。(选一)
      4、super关键字
        相当于当前父类对象的引用;
        this指向当前对象,super指向父类对象。
        子类的构造过程中必须调用父类的构造方法。若未调用,则默认调用父类的无参构造方法
        若子类构造方法中没显示调用父类,父类只定义了有参构造方法没有无参构造方法,则报错。需要在子类构造中手动调用父类的构造方法 super();!!!在子类第一行调用
        当父类引用指向子类对象的时候不能使用子类中多出来的东西
        重写的过程中,子类重写的方法需要调用父类被重写的方法的时候——super.方法名()
        当子类的成员变量和父类的成员变量同名的时候,需要访问父类的成员变量——super.成员变量名

      5、Object类:所有类的父类  

        toString()返回对象地址字符串;需重写 //source->Generate toString()
        “==”比较的是对象的引用是否指向同一块地址(栈区的内容),比较对象需要用equals()方法 //source->Generate hashCode() and equals()
        类对象 对象.getclass() //类的代码信息 姓名 年龄 。。。
        类的对象 对象 //类的对象信息 张三 18 。。。
        比较两个类的属性前应先转换成同一个类

    三、多态

      多态(一种方法有多种形态):动态绑定、池绑定
      当程序执行的时候根据传入的参数决定绑定哪个方法。
      条件:1)继承是多态的实现基础
         2)要有方法的重写
         3)要有父类的引用指向子类的对象。
      引用多态:
        父类的引用可以指向本类的对象 Animal obj1=new Animal();
        父类的引用可以指向子类的对象 Animal obj2=new Dog();
      方法多态:
        创建本类对象时,调用的方法是本类方法
        父类引用创建子类对象时,调用的方法为子类重写或继承的方法,不能调用子类自己特有的方法

      引用类型转换:
        向上类型转换(隐式/自动类型转换) 小类型到大类型的转换
        向下类型转换(强制类型转换) 大类型到小类型的转换
        instance of 运算符,解决引用对象类型,避免类型转换的安全问题
        例:if(animals instance of Dog){
            Dog dog2 = (Dog) animal;
          }

      抽象态:

         abstract关键词修饰

         只有声明不需要实现,以分号结束  例:public abstract void call();

    四、接口

      interface  只规定这些类里必须提供某些方法  不同类的相同特性

      语法:修饰符(abstract) interface 接口名 [extends 父接口1,父接口2 ...]{

              零到多个常量的定义                  public static final  //绿色字为系统自动

              零到多个抽象方法的定义    public abstract

          }

          一般接口名前加“I”

      继承父类实现接口的方法

      [修饰符] class 类名 extends 父类  implements 接口1,接口2,,,{

      }

      要继承父类,则extends在implements之前

  • 相关阅读:
    Silverlight:拖动滚动条控制媒体播放
    黑马程序员第一阶段3.面向对象第5天
    黑马程序员第一阶段2.java编程基础第4天
    黑马程序员第一阶段2.java编程基础第2天
    黑马程序员第一阶段2.java编程基础第3天
    黑马程序员第一阶段3.面向对象第6天
    黑马程序员第一阶段3.面向对象第8天
    黑马程序员第一阶段3.面向对象第7天
    黑马程序员第一阶段1.Java开发前奏第1天
    hdu 1133
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/7384161.html
Copyright © 2020-2023  润新知