JAVA读书笔记:面向对象

1.编程思想

编程思想的种类

        面向过程编程(procedure oriented Programming,POP),面向对象编程(object oriented programming,OOP),函数式编程(functional programming,FP)

典型代表

        POP:C、Fortran、Basic。

        OOP:Java、C++、Python、PHP、Smalltalk、Eiffel。

        FP:lisp、haskell、scala。

Java是面向对象编程语言

        面向对象编程(object oriented programming,OOP)是软件开发的一种新的方法,使用这种方法开发的软件具有易维护、可重用和可扩展等特征。

        OO技术主要包括三个领域:面向对象分析(object oriented analysis,OOA)、面向对象设计(object oriented design,OOD)和面向对象编程(object oriented programming,OOP)。

2.类与对象

2.1 面向对象概述

基本概念

        1.对象:现实世界中的一个实体。

        其特征:有一个状态用来描述它的某些特征。有一组操作,每个操作决定对象的一种功能或行为。

        2.类:具有相似特征和行为的对象的集合。

        类与对象的关系:属于某个类的一个具体的对象称为该类的一个实例(instance)。

        类与实例的关系:抽象与具体的关系。类是多个实例的综合抽象,实例是某个类的个体实物。

基本特征

        面向对象程序设计的三大特征是封装性、继承性和多态性。

2.2 类的定义

声明的格式:

[public][abstract|final] class ClassName [extends SuperClass][implements InterfaceNameList]{

        //1.成员变量声明

        //2.构造方法的定义

        //3.成员方法的定义

}

public:使类可被任何包中的类使用,缺省,则只能被同一包中的其他类使用。

abstract:使类成为抽象类。

final:使类成为最终类。

class:类的关键字。

ClassName:类的名称。

extends:指向继承某个父类的关键字。

SuperClass:该类要继承某个父类,它的名称。

implements:类实现接口的关键字。

InterfaceNameList:被实现的接口列表,用逗号分隔。

成员变量的声明格式:

[public|protected|private][static][final] type variableName[=value];

public:使变量可以被任何方法访问。

protected:使变量可以被同一个包中的类或子类访问。

private:使变量只能被同一个类的方法访问。

缺省访问修饰符:该变量只能被同一个包中的类访问。

static:该变量为静态变量,缺省,为实例变量。

final:该变量为最终变量,也称为标识符常量,一旦为其赋值,就不能再改变了。

type:该变量的类型。

variableName:变量名称。

value:变量值。

构造方法的定义格式:

[public|protected|private] ClassName([paramList]){

        //方法体

}

构造方法的访问修饰符用来决定哪些类可以使用构造方法创建对象,其含义与一般方法的相同。

ClassName:构造方法名,必须与类名相同。

paramList:参数列表,构造方法可以带有参数。

public ClassName(){

}//默认构造方法(无参构造方法),不带参数,方法体为空

成员方法的定义格式:

[public|protected|private][static][final|abstract] returnType methodName ([paramList]){

         //方法体

}

public:使方法可以在任何类中调用。

protected:使方法可以在同一个类、同一个包中的类以及子类中被调用。

private:使方法只能在同一个类中被调用。

缺省访问修饰符:可以被同一个类的方法访问和同一个包中的类访问。

static:该方法为静态方法,缺省为实例方法。

final:该方法为最终方法,它不能被覆盖。

abstract:该方法为抽象方法。

3.面向对象的继承性

概念

        继承的基本思想是可以从已有的类派生出新类。在类的层次结构中,被继承的类称为父类(parent class)/超类(super class),继承得到的类称为子类(sub class)/派生类(derived class)。子类继承父类的状态和行为,同时也可以具有自己的特征。

类继承的实现

使用extends关键字,格式如下:

[public] class SubClass extends SuperClass{

        //类体定义

}

程序示例:

Person.java

package com.demo;

     public class Person{

     public String name;

     public int age;

     public Person(){

     }

     public Person(String name,int age){

                 this.name=name;

                 this.age=age;

     }

     public void sayHello(){

                System.out.println("My name is "+name);

     }

}8bc1798318874b26905ee2382b5267b5.jpg

2838661a282146dd878e1e7867d24f1e.jpg

 这里定义了两个类,分别是Person类和Employee类。Employee类使用关键字extends继承或扩展了Person类,Employee为子类,Person为父类。

关于类继承的几点说明:

        1.子类继承父类中非private的成员变量和成员方法,若父类中定义了公共的访问方法和修改方法,子类可以通过这些方法来访问或修改private的成员变量和方法。

        2.定义类时若省略extends关键字,则所定义的类为java.lang.Object类的直接子类。

        3.Java仅支持单重继承,即一个类至多只有一个直接父类。可以通过接口实现其他语言中的多重继承。

方法覆盖

        子类定义与父类中的名字、参数列表、返回值类型都相同的方法,这时子类的方法就叫作覆盖(overriding)或重写了父类的方法。子类重写父类的方法,应在要重写的方法前添加@Override注解,使用注解可以避免错误。

        例如在子类Employee中重写父类Person的方法sayHello(),如下所示:

        @Override

         public void sayHello(){

                System.out.println("Hello ,I am "+name+"."+"I am "+age+".");

     }

方法覆盖两点注意:

        1.private方法不能覆盖。

        2.static方法不能被覆盖,可以继承父类的static方法。

super关键字

        子类可以使用super关键字,来引用当前对象的父类对象,可用于如下三种情况:

        1.子类调用父类被覆盖的方法,格式为:

        super.methodName([paramlist])

        2.子类调用父类的构造方法,格式为:

        super([paramlist])

        3.子类访问父类中被隐藏的成员变量,格式为:

        super.variableName

        这里,methodName表示要调用的父类中被覆盖的方法名;paramlist表示方法传递的参数;variableName表示要访问的父类中被隐藏的变量名。

调用父类的构造方法

        子类不能继承父类的构造方法,所以要创建子类对象,需要使用默认构造方法或为子类定义构造方法。Java语言规定,创建子类对象时,必须先创建该类的所有父类对象。因此,在编写子类的构造方法时,必须保证它能够调用父类的构造方法。

        1.子类构造方法调用父类构造方法的两种方式:

        1)使用super来调用父类的构造方法

        super([paramlist]);

        2)调用父类的默认构造方法

        若子类构造方法没有使用super调用父类构造方法,编译器将自动在第一句加上super()父类无参的构造方法。

        子类构造方法可以使用this调用本类的其他构造方法。需要注意的是this和super语句必须是构造方法中的第一条语句,并且最多只有一条这样的语句,不能既调用this,又调用super。

        2.构造方法的调用过程

        在任何情况下,创建一个类的实例时,将会沿着继承链调用所有父类的构造方法,这叫作构造方法链。系统首先调用所有父类的构造方法,包括所有类的根类Object类的构造方法。

4.面向对象的封装性

概念

        在Java语言中,对象就是一组变量和方法的封装体。封装性实现了模块化和信息隐藏,有利于程序的可移植性和对象的管理。

        对象的封装是通过下面两种方式实现的:

        (1)通过包实现封装性。在定义类时使用package语句指定类属于那个包。包是Java语言最大的封装单位,定义了程序对类的访问权限。

        (2)通过类或类的成员访问权限实现封装性。

                类的访问权限通过修饰符public实现,public类可以被任何其他类使用,缺省访问修饰符的类仅能被同一包中的类使用。

                类成员的访问修饰符共有4个,分别是private、缺省的、protected和public,各自访问权限如下图所示:

      e1e8ba6621414334b60acc789c69929d.jpg

5.面向对象的多态性

概念

        多态(polymorphism)就是多种形式,是指Java程序中一个类或多个类中可以定义多个同名方法,这多个同名方法完成的操作不同,这就是多态。多态性是指在运行时系统判断应该执行哪个方法的代码的能力。

        Java语言支持两种类型的多态:

        (1)静态多态:也叫编译时多态,是通过方法重载实现的。

                对重载的方法,Java运行时系统根据传递给方法的参数个数和类型确定调用哪个方法。

        (2)动态多态:也叫运行时多态,是通过方法覆盖实现的。

                对覆盖的方法,运行时系统根据实际类型决定调用哪个方法。对子类的一个实例,如果子类覆盖了父类的方法,运行时系统调用子类的方法,如果子类继承了父类的方法,则运行时系统调用父类的方法。

对象转换

        子类是它父类的特殊化,每个子类的实例也都是它父类的实例,但反过来不成立。因此子类对象和父类对象在一定条件下也可以相互转换,这种类型转换一般称为对象转换或造型(casting)。

        对象转换也有自动转换和强制转换之分。因为子类的实例总是它父类的实例,所以总是可以把一个子类的实例转换成一个父类的变量,子类对象可以自动转换为父类对象,这种转换称为向上转换(up casting)。当把父类实例转换为子类变量时,必须使用强制类型转换,强制类型转换需要使用转换运算符“()”。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值