方法
一段独立的代码,能完成一件事情,可以被重复调用。 方法可以减少重复的代码。
通常情况下,方法通过对象或类名使用"."操作符进行调用,也可能不用"."直接调用。
定义方法
修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名...){ 方法体 }
返回值类型、方法名和参数列表(小括号中的内容)是组成方法的三要素
返回值类型可以是任意数据类型(原始类型/引用类型)
小括号中的内容称为参数列表只需写参数类型和参数名,多个参数用逗号隔开。可以没有参数,但 必须要有小括号
访问修饰符可以不写,会有默认的修饰符
不同的返回值类型,要在方法体中返回(return)对应类型的结果,如果没有返回值,用void
面向对象编程
Object Oriented Programming 简称OOP
是创建解决问题的对象,赋予对象对应的行为和特征,让这些对象互相配合(调用 对象的方法)完成。
类与对象
定义类:[修饰符] class 类名{ //属性(变量) //行为(方法) }
具有相同属性和行为的对象的集合,称为"一类"。可以理解为模板
属性:描述对象的特征,在程序中,通过定义变量的形式表现属性。
行为:描述对象的动作,在程序中,通过定义方法的形式表现行为。
对象:类名 对象名 = new 构造方法([参数]);
创建的对象,通过"."操作符访问类中的非私有属性和方法。
类与对象的关系:对象是类的具体表现,类是对象的集合(模板)。
局部变量:定义在方法中的变量,称为局部变量。默认有默认值,赋值后才能使用
成员变量:定义在类中的变量,称为成员变量,拥有默认值
构造方法
构造方法是一个特殊的方法,没有返回值,方法名和类名一致
每个类在定义时,都有一个默认隐藏的无参数的构造方法,在创建对象时调用。
构造方法通常用于初始化成员变量。
public class Test{
//这就是无参数的构造方法,默认就会存在,不过是隐藏的
public Test(){
}
}
每个类默认有一个隐藏无参数的构造方法,方法体中没有内容,用于创建无参数的对象
构造方法没有返回值(没有返回值这一部分,不是void),构造方法名必须和类名相同
构造方法可以限制创建对象时的参数
构造方法不能通过“.”操作符访问,只能通过new关键字创建对象时自动调用,所以构造方法通常用 于初始化成员变量
面向对象的三大特性
封装
使用private关键字对属性进行修饰。再对外提供一组公开的get/set方法用于对该属性读取或赋值。
可以防止除自身类之外的地方对该属性就行访问。
public class Student{
//创建类,编写成员变量,给成员变量添加private修饰符
private int stuId;
private String stuName;
private String major;
}
这是创建对象后,无法通过"."访问属性,只能通过get/set方法
使用IDEA自动生成getter/setter方法 在代码空白处右键选择generate或快捷键alt+insert
继承
类A可以通过extends关键字继承类B。
语法:class 类A extends 类B{
类A称为子类、派生类、衍生类、subClass
类B称为父类、根类、超类、superClas
继承后,子类可以访问父类中非私有(没有被private修饰的内容)的属性和方法。
子类可以对父类中的方法进行扩展或覆盖,这称为方法重写。重写后,子类对象再调用该方法时, 执行的是重写后的内容
Java中是单继承。一个子类只能extends一个父类,一个父类可以有很多个子类
Java中可以多重继承。类A可以继承类B,类B可以继承类C,这时类A既是类B的子类,也可以称为 类C的子类,可以访问类B与类C中非私有的成员
在创建子类对象时,会先执行父类中相应的构造方法
方法重写
当子类继承父类后,可以对父类中非私有的方法进行扩展或覆盖,这个过程称为方法重写。
· 方法名、参数列表、返回值必须和父类一致
· 访问权限不能比父类更严格(访问修饰符的范围要么一致要么更大)
· 不能抛出比父类更大的异常
this和super关键字
当做对象使用
用法:“this.属性”或“this.方法”或“super.属性”或“super.方法”
此时的this表示“当前类”,super表示"父类对象"。
public class Person{
private String name;
public void setName(String name){
this.name=name;//这里的this表示当前类Person的对象
//this表示Person p = new Person();中的p
}
}
public class Man extends Person{
public void fun(){
System.out.println(super.getName());//这里的super表示当前类父类Person对象 //super表示Person p = new Person();中的p
}
}
多态
多态就是子类的对象指向父类的引用(子类对象使用父类变量接收,即向上转型)。
父类 变量 = new 子类();
public class Father{
}
public class Son extends Father{
}
public class Main{
public static void main(String[] args){
Son son = new Son();
//这就是多态的体现
//子类的对象,可以使用父类的变量保存
Father father = new Son();
}
}
final:表示常量
用于修饰属性、方法和类
修饰属性:变量变为常量,不能改变其中的值。
修饰方法:方法成为最终方法,不能重写。
修饰类:类成为最终类,不能被继承。
adstract:抽象的
修饰方法:访问修饰符 abstract 返回值类型 方法名(参数类型 形参名称);
修饰方法,方法成为抽象方法,没有方法体,同时该方法的所在类也一定要用abstract修饰,让其成为 抽象类。
抽象方法只能出现在抽象类中,不能出现在普通类中。
修饰类:访问修饰符 abstract class 类名{}
· 抽象类中可以没有抽象方法。
· 抽象类中有构造方法,但该构造方法只会在new抽象类的子类对象时会自动调用,抽象类不能创 建 自身对象。
· 抽象类通常需要被继承,一旦有子类继承了抽象类,就必须要重写抽象类中的所有抽象方法。
static静态的
static是一个修饰符,可以修饰属性、方法、代码块。
被static修饰的内容,称为静态成员。静态成员在类加载的时候,就会保存到内存中,可以脱离对象存 在。
如果某个属性或方法被高度重用时,可以将其定义为static静态的。
这样这些属性就会脱离对象,在类加载时就加载到内存中,从而直接通过类名即可访问。 或不想创建对象就想使用该类中的属性或方法时,将它们定义为静态的。
interface 用于定义接口的关键字。
如果想要让某个类作为多个"类"的子类时,将这些"父类"定义为接口
如果某个抽象类中全都是抽象方法时,可以将这个类改为接口。
· 接口是一个完全抽象类,其中的方法都是public abstract修饰的抽象方法,没有方法体,其中的 属性都是public final static修饰的静态常量。
· 接口中没有构造方法,不能创建对象。
· 接口通过implements实现,实现它的类称为该接口的实现类。
· 一个类可以同时实现多个接口
· 一个类实现了接口后,必须重写其中的抽象方法。
extends和implements
类A extends 类B:类A当做类B的子类,继承。
类A implements 接口A,接口B...:类A当做接口A、接口B的实现类("子类")
接口A extends 接口B:接口A通过extends继承接口B
类A extends 类B implements 接口A,接口B...:类A是类B的子类,是接口A、接口B的实现类,同时能访问这三个"父类"中的数据。
总结
经过这一周的学习初步了解了面向对象编程,重点学习了面向对象的三大特性(封装,继承,多态),接口等等,相对于之前学习的基础,本周学习的内容更考验逻辑思维能力。虽然学习了很多的理论知识,但在应用方面仍比较生疏就像在编写时会出现调用对象是会出现调用过去的对象的类型和接受对象的类型不一致等等的情况,这都是理论掌握不够熟悉,实际动手能力较差的表现,还需要活学活用,多敲多看不然只能望而生叹。