码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-17 21:27:02      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:屏蔽   http   年龄   idt   问题   super   animal   out   运算   

面向对象的三大基本特征
  封装(封装方法)——代码复用,屏蔽细节。
  继承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之前

 

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

标签:屏蔽   http   年龄   idt   问题   super   animal   out   运算   

原文地址:http://www.cnblogs.com/Lune-Qiu/p/7384161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!