JavaSE:Java基础1:Java面向对象三大特性

Java面向对象三大特性 : 封装、继承、多态。

面向对象思想中有两个概念,类和对象。

类:对某一类事物的抽象描述。

对象:现实生活中该类事物的个体。

好吧,很抽象是不是,不要紧,有图有真相。

JavaSE:Java基础1:Java面向对象三大特性

本人喜爱足球,所以拿足球举例了。

图中可以将中场看作一个类,下面的球员名称看成对象,从中场和球员名称的关系可以看出类和对象的关系。

中场可以描述多个球员名称单位共同特征,它是对象的模板。下面的球员名称就是现实中的个体,是类的实例。

类是对对象的抽象,用于描述一组对象的共同特征和行为。

类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征(属性),成员方法描述对象的行为(方法)。

如:class   player {

  private   String    position;      //定义String类型的变量position

  //定义   kick()方法

  public   void    kick(){

     System.out.println("大家好,我踢的位置是"+position+"!");

   }

 

}

 

类的封装:定义一个类时,将类中的属性私有化,使用private关键字来修饰,私有属性只能在它所在的类中被访问。为了让外界可以访问私有属性,需要提供一些使用pulic修饰的公共方法,其中包括用于获取属性值的getXxx()方法和设置属性值的setXxx()方法。

封装场景:假设有个学生类,如果没有对它的age属性设置私有属性,便可以在给它的age属性赋值为-30,这肯定是不符合逻辑的。为了对该学生类的成员变量进行限定,不允许外界随意访问,这时候就需要实现类的封装。实际开发中用的比较频繁。

 

java四种访问权限:https://www.cnblogs.com/jinggod/p/8425423.html。(转的某位少侠的)

类的继承: 在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

继承场景:日常开发中,通常把一些常用的备用字段、时间、分页类等放到一个类中,其它业务类继承该公共类即可。

java类中只能是单继承(继承类),多实现(实现接口)。

为何是单继承,如果可以继承多个父类,当多个父类中有重复的属性或者方法,子类不知道具体调用哪一个,就好比儿子/女儿只能有一个亲生父亲,因此是单继承。

需要注意的是 Java 不支持多继承,但支持多重继承。

JavaSE:Java基础1:Java面向对象三大特性

JavaSE:Java基础1:Java面向对象三大特性

上面截图引用菜鸟教程,http://www.runoob.com/java/java-inheritance.html

为何是多实现,通过实现接口拓展类的功能,若实现的多个接口中有重复的方法也没关系,因为实现类中必须重写接口中的方法,所以调用时还是调用的实现类中重写的方法。那么各个接口中重复的变量又是怎么回事呢? 接口中,所有属性都是 static final修饰的,即常量,这个什么意思呢,由于JVM的底层机制,所有static final修饰的变量都在编译时期确定了其值,若在使用时,两个相同的常量值不同,在编译时期就不能通过。参考:(https://blog.****.net/u014507083/article/details/52810283?locationNum=3&fps=1)。

类的多态:同一个行为具有多个不同表现形式或形态的能力,在同一个方法中,由于参数类型不同导致执行结果不同的现象。

多态场景:使用的比较多io流。看一下链接,https://blog.****.net/u013679744/article/details/77686646

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

多态存在的三个必要条件

  • 继承:子类继承父类
  • 重写:子类重写父类的方法
  • 父类引用指向子类对象(向上转型):Animal   a  =  new  Dog();
  • 向下转型:Dog   d  =  (Dog)new  Animal();   向下转型是为了使用子类特有的功能。