JAVA面向对象编程

总说 JAVA 是一门 OOP 编程语言,针对这一观点,探究一下 OOP 涉及的相关内容。

1.总结

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

通过对象来访问和操作其内部的数据是一种基本的面向对象思维,意味着要把一些数据(属性)和函数(方法)打包放在一起,创建不同的实例,再对其进行点操作。

只有属性的类可以看作一个自定义数据类型,存入的数据由基础数据类型组合而成。

static 关键词表示静态属性/方法(类属性/方法),不用创建实例就可以使用;没有 static 则表示为实例方法,需要 new 一个新的实例才能用。

被 static 修饰的变量、常量和方法,不可使用 this ,static 方法只能访问 static 的属性和方法。

final 关键词修饰变量时表示常量,类似于 swift 中的 let,cpp 中的 const。修饰类时表示不可继承,修饰方法时表示不能被重写。

class 或 interface 的命名首字母大写。

外部类不能用 protected 和 privated 修饰,否则对包内不可见。

2.继承

一般需要考虑继承的情况,1.子类中需要增加额外属性,2.子类需要增加自己独有的行为方式

使用extends关键字表示继承关系,

JAVA不支持多继承,一个子类只能拥有一个父类

子类不能访问父类的 private 属性和方法,子类再写一个同名的属性和方法不算override,不是重写(覆盖)而是看作一个全新的属性或方法。

super 关键字指代父类,所以 super () 表示的是父类构造函数,要放在函数中第一行。

子类不可获得父类的构造器,如果没写会默认调用父类的无参构造函数,或者用 super(参数) 的方式调用父类有参构造函数。

父类中有一些非public的属性或方法,可以用super.来访问,这步操作会破坏封装性。

向上转换:将一个子类对象赋值给一个父类引用变量,使得该引用变量编译时类型为父类,运行时类型为子类。点操作只能调用子类的方法。

3.封装

通过private封装和隐藏内部实现细节,避免被误操作。每个类封装其内部细节,对外提供高层次的功能,使其他类在更高层次上考虑和解决问题,是计算机程序的一种基本思维方式。

比如下面创建一个 Point 类,和一个 Line 类,上层 mian 函数中尽情调用 Line 的接口,下层的 Point 要为上层 Line 服务

/* 主函数,作为程序入口 */
public static void main (String[] args){
  Point start = new Point(2, 3);
  Point end = new Point(4, 5);
  Line myLine = new Line (start, end);
  system.out.println(myLine.length()); //调用Line方法,可以不管细节    
}

/* Line 类中着重体现length()的计算交由下层去做 */

public class Line{
  public float length(){
  return   start.distance(Point end); //在start实例中调用它自己的函数
  }  
}

/* Point 类中着重体现 distance 距离计算。*/
public class Point{
  public float distance(Point end){
    return Math.sqrt(Math.pow(x-end.getX,2) + Math.pow(y-end.getY,2)); 
  }  
}

 封装依靠权限管理来实现,private 只有自己能访问自己, default 多了包内可访问,protected 多了子类可访问, public 多了全文可访问

4.多态

子类对象可以赋值给父类引用变量,这叫多态;实际执行调用的是子类实现,这叫动态绑定。

5.类

类是封装对象(实例)的属性和行为的载体。

5.1 构造函数

与类名相同,可以通过不同参数个数或种类完成重载。

无返回值

在构造函数中可通过 this() 传递参数,以调用另一个构造函数

public Point(){
  this (0, 0);  
}

public Point(int x, int y){
  this.x = x;
  this.y = y; //前者是实例中的属性,后者为传入值    
}

 新建实例默认构造方法如下

Point p = new Point(2, 3);

5.2 重写

对于同名同参数的函数,如果需要在子类中实现和父类不同的功能,只能进行重写。

@Override

 执行时会动态绑定不同子类执行重写后的方法,实现多态。

5.3 抽象类

abstract 抽象类,意味着有很多内部细节还未完善,必须要在子类中完善,不可直接 new 出一个抽象类的实例。不能用 static 或 private 关键词修饰。

5.4 接口

相当于由抽象方法组成的类,可以弥补Java类不支持多继承的问题,继承多个接口并实现具体的方法即可解决。

接口定义用 interface ,继承用 implements,继承多个接口用逗号分隔。

属性默认修饰为 static public,方法默认修饰为 static final public。

5.5 内部类

内部类就是类里面又创建一个类,匿名内部类可以用于直接实现接口功能的情况,例子在Java从入门到精通232页。

posted on 2023-03-02 21:06  MIXTAPE_208  阅读(28)  评论(0)    收藏  举报

导航