JAVA面向对象编程
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) 收藏 举报
浙公网安备 33010602011771号