JavaSE(面向对象)
Posted earnest-jie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE(面向对象)相关的知识,希望对你有一定的参考价值。
Java面向对象(Object-Oriented Promgramming)
学习面向对象内容的三条主线
- Java类及类的成员
- 面向对象三大特征
- 其他关键字
面向对象
概念
Java是面向对象的编程语言,与面向过程(procedure-oriented programming)相对,对象是面向对象编程的核心.对象其实就是真实世界中的实体,对象与实体是一一对应的,换言之,真实世界中的每一个实体就是一个对象,它是一种具体的概念.
特点
- 对象有属性和行为.(就像现实世界的实体都有状态和动作)
- 对象具有变化的状态.(现实世界的实体也并非一成不变的)
- 对象是唯一的
- Everything is object.
- 对象是某个类的具体实例.
思想概述
-
程序员从执行者转化成了指挥者
-
完成需求时:
- 先去找具有所需功能的对象来用。
- 如果该对象不存在,那么创建一个具有所需功能的对象。
- 这样简化开发并提高复用。
-
类(class)和对象(object)是面向对象的核心概念。
- 类是对现实世界事物的描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的一个个体,因而也称实例(instance)。
对象组成(类和类成员)
- 属 性:对应类中的成员变量(描述事物的特征)
- 行 为:对应类中的成员方法(描述事物的行为)
class Person{
String name;
int age;
boolean isMarried;
//↑属性,或成员变量
//↓方法,或函数
public void walk(){
System.out.println("人走路...");
}
public String display(){
return "name : " + name + ", age : " + age + ", Married : " + isMarried;
}
}
面向对象的三大特征
封装 (Encapsulation)
使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
public class Animal { //应该将legs属性保护起来,防止乱用。保护的方式:信息隐藏
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public void move(){
System.out.println(“Moving.”);
}
}
public class Zoo{
public static void main(String args[]){
Animal xb=new Animal();
xb.legs=4;
System.out.println(xb.legs);
xb.eat();xb.move();
}
}
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
-
隐藏一个类中不需要对外提供的实现细节;
-
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
-
便于修改,增强代码的可维护性;
继承 (Inheritance)
为什么要有继承?
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
-
此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父类”
-
类继承语法规则:
class Subclass extendsSuperclass{}
特点
Java只支持单继承,不允许多重继承
- 一个子类只能有一个直接父类
- 一个父类可以派生出多个子类
class SubDemo extends Demo{ } //ok
class SubDemo extends Demo1,Demo2...//error
override(方法覆盖)
-
定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重写、重置。在程序执行时,子类的方法将覆盖父类的方法。
-
要求:
- 覆盖方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。
- 覆盖方法不能使用比被重写方法更严格的访问权限。
- 覆盖和被覆盖的方法必须同时为非static的。
- 子类方法抛出的异常不能大于父类被重写方法的异
super
-
在Java类中使用super来调用父类中的指定操作:
- super可用于访问父类中定义的属性
- super可用于调用父类中定义的成员方法
- super可用于在子类构造方法中调用父类的构造器
-
注意:
- 尤其当子父类出现同名成员时,可以用super进行区分
- super的追溯不仅限于直接父类
- super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
多态 (Polymorphism)
多态性
是面向对象中最重要的概念,在java中有两种体现:
- 对象的多态性
- 引用变量的多态性
- Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
- 若编译时类型和运行时类型不一致,就出现多态(Polymorphism)
对象的多态性
子类对象的多种父类形态, 换言之就是把子类对象作为父类对象来使用.
引用变量的多态性
- 一个基本型变量只能有一种确定的数据类型
- 一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();
//Object类型的变量o,指向Person类型的对象
o = new Student();
//Object类型的变量o,指向Student类型的对象
多态副作用
- 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法(多态副作用)
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student();
e.school = “pku”; //非法,Person类没有school成员变量
属性和方法是在编译时确定的,编译时引用变量e为Person类型,Person类型中并没有school成员变量,因而编译错误, 方法的使用也是一样
虚拟方法调用(Virtual Method Invocation)
// 正常的方法调用
Person e = new Person();
e.getInfo();
Student e = new Student();
e.getInfo();
// 虚拟方法调用(多态情况下)
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。——动态绑定
以上是关于JavaSE(面向对象)的主要内容,如果未能解决你的问题,请参考以下文章