Java面向对象阶段笔记总结

1、面向过程和面向对象编程的差异

面向过程(Procedure Oriented Programming,简称POP),是一种最基本的编程思想。完成某件事情主要通过流程步骤逐步实现。注重细节

面向对象(Object Oriented Programming,简称OOP),是最为推广的编程思想。完成某件事情主要将解决问题的所有参与对象创建出来,并赋予对象对应的行为属性注重创建解决问题的对象

2、类和对象

2.1类(Class)

类是具有相同属性和行为的对象的集合(也可以叫做模板)。

属性:是描述对象的特征,在代码中以定义变量的形式呈现。

行为:是描述对象的动作,在代码中以定义方法的形式呈现。

/*
	定义一个学生类
		修饰符 class 类名{
		//属性
		//方法
		}
*/
public class Student{
    //定义属性
    String name;//学生姓名
    int studentId;//学生学号
    //定义方法
    void info(){
        //介绍自己的信息
        System.out.println("我叫"+name+",学号是"+studentId);
    }
}

2.2对象(Object)

对象是类的一个具体实例,是类的一个具体表现。

/*
	创建对象
		类名 对象名 = new 构造方法(参数);
*/
public class Test{
    public static void main(String[] args) {
        //创建一个学生类的对象
        Student student = new Student();
        //给对象赋值
        student.name="小明";
        student.studentId=1001;
        //调用方法
        student.info();
    }
}

类和对象的关系

对象是类的一个具体实例,类是对象的集合(模板)。先定义类(模板)才能同过类创建对象。

3.成员变量、局部变量、静态常量

  • 成员变量:定义类中的变量,也成为这个类的属性,拥有默认值,在创建对象时创建,通过对象对其进行访问。
  • 局部变量:定义在方法中的变量,没有默认值,必须赋值了才能使用,在调用方法时创建。
  • 静态常量:特殊的成员变量,使用范围在该类中,使用static和final修饰符修饰,通常在定义时赋值,在加载类时创建,通过类名方法调用。

4、构造方法

构造方法是一种特殊的方法,方法名和类名一样,并且没有返回值。

  • 没有返回值部分(不是使用void),方法名必须和类名一致 。
  • 在使用new关键字创建对象时自动调用对应的构造方法 。
  • 每个类在定义后,隐藏有一个默认的无参数的构造方法 。
  • 如果自己写了一个构造方法后,默认隐藏的无参数的构造方法就会失效 构造方法通常用于初始化成员变量 。
  • 构造方法之间都是重载关系。
  • 构造方法不能重写 构造方法执行时,不一定会创建对象。如抽象类中有构造方法,但该构造方法只在创建其子类对象 时自动调用。

5、面向对象的三大特性

5.1、封装

将类中的属性使用private修饰后,就可以不允许非当前类进行访问,以此达到保护核心代码的目的。 封装的步骤:(private的使用)

1.给类中的所有属性添加private修饰符 。

2.给每个属性定义setXX()方法用于赋值。

3.给每个属性定义getXX()方法用于读取属性。

5.2、继承

类A可以通过extends关键字继承类B。 语法:class 类A extends 类B 类A称为子类、派生类、衍生类、subClass 类B称为父类、基类、超类、superClass 继承后,子类可以访问父类中非私有的属性和方法。 不同的子类中相同的代码,都可以定义在父类中,减少子类中的代码冗余。

继承的特点
  • 如果多个类之中有相同或类似的代码,可以将这些代码提出来定义在一个公共的类中,这个类就是 父类。再让那些类去继承这个父类,这样就能减少子类的重复代码。
  • 子类对象可以直接访问父类中非私有的属性和方法
  • 子类可以对父类中的方法进行拓展或覆盖,这称为方法重写,重写后,子类对象再调用该方法时, 执行的是重写后的内容。
  • java中是单继承,一个子类只能有一个父类,一个父类可以有多个子类。
  • java中可以多重继承,类A可以继承类B,类B也可以继承类C,这时类A可以访问类B和类C中非私 有的成员。
  • 任何类都是Object类的子类。
  • 在创建子类对象时,先执行父类中相应的构造方法。
方法重载overload

在一个类中,如果多个方法的方法名相同,参数列表不同(参数类型不同或参数数量不同)时,这些方法称 为重载的方法。同名不同参。重载用于在一个类中,某个方法在不同的条件下,执行不同的内容。

注意:方法名相同,参数列表(参数类型和数量)不同。

方法重写override

当子类继承父类后,可以对父类中非私有的方法进行拓展。这个行为称为方法重写。重写用于子类拓展父类的某个方法。

注意:方法名、参数列表、返回值必须和父类一致,访问权限不能比父类更严格(访问修饰符的范围要么相同要么更大),不能抛出比父类更大的异常。

5.3、多态

多态是面向对象语言的一种特性,通常在代码中用于:需要使用一个父类对象时,实际传递的是一个子 类对象,这时可以将子类对象当做父类对象使用。这种特性称为多态。

6、this和super

都可以当做对象或构造方法使用。

当做对象:this表示当前类的对象,super表示当前类的父类对象,this或super当对象时,只能用在非静态方法中。

当做构造方法:this()表示当前类的无参构造方法,super()表示当前类的父类的无参构造方法,this或super当构造方法时,只能放在另一个构造方法的第一行。

每个继承关系中,如果父类和子类都没有重载构造方法时,子类里都有一个默认无参的构造方法,其中 在调用父类的无参的构造方法。

7、Object类

Object类是所有类的根类。任何类都直接或间接的继承了该类,但没有显式地写出来。所有类都可以调用或重写 Object类中的方法。 toString()在输出某个对象时自动调用的方法,默认Object中输出的是“对象所在类的全限定名@十六进制 哈希码”, 通常自己定义的类需要重写该方法,用于输出该对象中的属性。 equals()是比较两个对象是否相同的方法,默认Object中使用==比较,所以自定义类后,如果要比较该 类的对象,一定要重写equals方法和hashcode方法,根据指定参数比较两个对象是否相同。

8、abstract

abstract是一个修饰符,用于修饰方法或类。

8.1、修饰方法

用法:访问修饰符 abstract 返回值 方法名(参数列表);如果某个父类中的方法在定义时无法决定要做什么,而是由其子类负责实现时,该方法可以定义为抽象 方法。

注意这里的方法不能有方法体(大括号)。这时该抽象方法所在的类,也必须用abstract修饰,让其成为一个抽象类。

特点:抽象方法没有方法体,抽象方法只能定义在抽象类或接口中,抽象方法通常需要子类重写,abstract不能修饰构造方法和静态方法。

8.2、修饰类

如果一个类中有抽象方法,该类一定得是抽象类。用法:访问修饰符 abstract class 类名{}。

特点:抽象类不能实例化(不能创建抽象类的对象),抽象类中可以有抽象方法,也可以有普通方法、构造方法(除抽象方法外和普通类一样),抽象类的构造方法在创建其子类对象时自动执行,但不会创建抽象类的对象,某个类如果继承了抽象类,那么这个类要么也是抽象类,否则就要重写抽象类中的所有抽象方法,通常抽象类都需要子类继承后重写其中的抽象方法。

9、interface

在java中,数据类型分为原始类型和引用类型。引用类型分为:数组、类和接口。所以接口是一种数据类型,类似于类。类使用class定义,接口使用 interface定义。如果一个抽象类中的所有方法都是抽象方法,那么就可以将这个抽象类定义为接口。

9.1、定义接口

访问修饰符 interface 接口名{};

由于java是单继承,如果类A想要继承多个"父类"中的内容时,就不能使用extends,但可以使用 implements实现多个接口而达到多继承的目的。接口是一个完全抽象类,其中的方法都是被public abstract修饰的公开抽象方法,其中的属性,都是被 public static final修饰的公开的静态常量,需要在定义时赋值才能使用。接口和抽象类一样,通常需要子类继承,但继承接口,称为"实现接口"。使用implements关键字实现。

ts实现多个接口而达到多继承的目的。接口是一个完全抽象类,其中的方法都是被public abstract修饰的公开抽象方法,其中的属性,都是被 public static final修饰的公开的静态常量,需要在定义时赋值才能使用。接口和抽象类一样,通常需要子类继承,但继承接口,称为"实现接口"。使用implements关键字实现。

特点:接口不能实例化,接口中的抽象方法默认使用public abstract修饰,属性默认使用public static final修饰,接口中没有构造方法和普通方法(jdk1.8后,接口中允许定义"default修饰的默认方法"和"static修饰的静态方法")接口的实现类,必须重写接口中的抽象方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值