疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

面向对象三大特点:封装、继承、多态


 

  面向对象的三大特点:封装、继承、多态

  一、封装

  封装——面向用户更简单,面向属性更安全。

  private私有的,保护起来。

  classDog{

  privateStringname;//private修饰的对象表示私有只有本类中可以访问。

  privateintage;

  publicvoidsetAge(intage){//外部给里传值通过set方法

  if(age>=1&&age<=12){

  this.age=age;

  }

  }

  //setNames小写,变量名首字母大写

  publicvoidsetName(Stringname){

  this.name=name;

  }

  publicStringgetName(){//外部要访问通过get方法

  returnname;

  }

  privatebooleanstate;

  publicvoidsetState(booleanstate){

  this.state=state;

  }

  publicbooleanisState(){//布尔型用isState

  returnstate;

  }

  privateString[]types;//数组型

  publicvoidsetTypes(String[]types){

  this.types=types;

  }

  publicString[]getTypes(){//返回数组

  returntypes;

  }

  publicStringgetTypes(intindex){//返回数组下标

  returntypes[index];

  }

  publicvoidsetTypes(intindex,Stringtype){//改变数组中下标为index的数为type

  this.types[index]=type;

  }

  publicDog(Stringname,String[]types,booleanstate){

  this.name=name;

  this.types=types;

  this.state=state;

  }

  publicDog(){

  }

  }

  classTest{

  publicstaticvoidmain(String[]s){

  Dogd=newDog();

  d.name="";//错误访问方式,要使用d.getName()方法

  }

  }

  二、继承

  继承就是代码的高效率复用

  继承也可以说是产品的扩展和升级

  继承等于拥有当对私有不可访问

  extends继承关键字

  对象=实例

  父类子类

  超类派生类

  基类

  classanimal{//父类

  voidsing(){

  System.out.println("我是小白");

  }

  }

  classdogextendsanimal{//dog继承了animal的方法

  }

  }

  publicclassExtendsDemo{

  publicstaticvoidmain(String[]s){

  doga=newdog();

  a.sing();

  }

  }

  三、多态

  1、子类覆盖父类的方法

  2、父类类型引用子类对象

  子类可以演变成父类。

  面向父类编程。

  运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。

  要理解多态性,首先要知道什么是“向上转型”。

  我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过

  Cat c = new Cat();

  实例化一个Cat的对象,这个不难理解。但当我这样定义时:

  Animal a = new Cat(); 这代表什么意思呢?

  很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。

  所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

  同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

  对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。