第五章、对象

本文详细解读了Java中的类、对象概念,包括类的模板性质、对象的万物之基特性,以及静态与动态代码块的区别。还介绍了权限修饰符的访问范围和继承规则,重点讲解了构造方法、方法重写、多态和抽象类/接口的使用。
摘要由CSDN通过智能技术生成

第五章、对象

类:

类是创建对象的模板

是客观存在的事物在人脑中的主管反应

是大量对象共性的抽象

静态代码块

public class A{
    //静态代码块,在类加载将类加载到虚拟中时直接执行
    static{}
    //动态代码块,在创建对象时先构造方法执行
    {}
}

类修饰符

只能使用public和不写(默认)修饰类,且一个类中只能将一个类得权限修饰符定义为public且此类名要与文件名一致

动态代码块

静态方法(使用static修饰的方法):

类特有的方法,通过类名调用

对象:

万物皆对象,万物皆依赖对象

成员:

属性(属性类型可以是常见和引用类型,例如数组、对象,也可以是八种基本数据类型)、方法

方法重载:

方法名相同,但是参数(类型,个数,顺序)不同

可变参数:

参数使用(类型 … 变量名)表示

构造方法(无返回值类型的方法):

使用(修饰符 类名)构造,可以重载,可以私有化

特点:

没有创建构造方法时,系统自动创建一个无参构造方法

当创建了构造方法时,系统不会自动创建构造方法

在构造方法中可以调用其他的构造方法(使用this()调用,但是只能调用一次,且此调用必须放在最前面)

作用:

创建对象,并为对象赋初始值,如果在构造方法里面要调用构造方法,只能使用this调用且只能放在第一行

this:

当属性和局部变量冲突时,使用this可以避免冲突

关键字

static:

特性:

一旦成员被static修饰,则此成员为类成员(静态成员)

使用:

静态成员只能访问静态成员

非静态成员可以访问所有成员

final:

特性:

final修饰变量或是属性名

一旦使用fianl修饰,则变为了常量

一定要初始化,

全部字母大写

一般使用final修饰的成员也是用static修饰

final修饰方法

被修饰的方法不能重写,不可以修饰抽象方法

final修饰类

被修饰的类不能可以被继承,不可以修饰抽象类和接口

extends

特性:

继承关键字,在前面的为子类,在后面的为父类(子类继承父类)

可以继承父类的成员(除了构造方法和私有成员)

一个子类只能由一个父类,一个父类可以有多个子类

如果没有显示继承,默认继承java.lang.Object类

注意

(虽然属性无法继承,但是可以通过父类的get,set方法取访问这些属性)

访问顺序

四种权限修饰符的访问、继承范围

权限修饰符(public>protected>default>private)
public:
	访问范围:任何地方都可以访问。
	继承范围:任何子类都可以继承。
protected:
	访问范围:本类内部、同包下的其他类可以访问,非同包下的其他类无法访问。
	继承范围:任何子类都可以继承。
(default:)
	访问范围:本类内部,同包下的其他类可以访问,非同包下的其他类无法访问。
	继承范围:同包下子类可以继承,非同包下的子类无法继承。
private:
	访问范围:本类内部可以访问。
	继承范围:任何子类都无法继承。

本类本包子类其他包
private×××
default××
protected×
public
访问范围继承范围
private本类内部不能继承
default本类和本包本包的子类
protected本包和子类子类都可以继承
public所有范围所有范围

super

调用父类的成员,调用父类的构造方法super();(给父类初始化对象的属性)

调用父类的其他成员使用super.成员

方法重写:

使用@Override(给电脑看的注释)

必须和父类的返回类型、方法名、参数一致,

权限修饰符可以不同但是一定要扩大范围(例父类是default,则子类的修饰符只能为Protected或是public)

多态

发消息给这个对象,让对象自己决定采用哪种方式相应这个消息

将子类自动向上转型,

子类对象赋值给父类引用

只能调用父类的方法

前提

发生了继承

方法进行了重写

类型向上转换

作用

提高代码的可重用性,降低模块间的耦合度

抽象

如果是不具体的时候可以定义为抽象的,使用abctract修饰,不需要方法体

public abstract area();

如果一个类中有抽象方法,那么这个类一定要定义成抽象类

但是抽象类可以没有抽象方法

抽象类不可以创建对象,但可以作为引用

Person per = new Student();//Person为抽象类,Student为具体子类

抽象类如果被继承,那么子类想要实例化则必须重写父类的抽象方法,不然为抽象类,无法实例化

抽象类和抽象方法不可以被final修饰

属性不可以被abstract修饰

抽象类有构造方法

接口

接口中的方法都是抽象方法

接口中方法的abstract修饰符可以省略不写

接口中的权限修饰符只能是public或是default

接口中的属性为静态常量,static和final可以省略不写

接口使用interface类型,

接口使用implements实现使用

接口可以单继承多实现

接口间可以多继承

接口不能有构造方法

jdk8之后

接口中可以有静态方法

接口中不能有静态代码块

可以有默认方法

jdk9之后

可以有普通和静态私有化方法

默认方法

使用default修饰的方法,default修饰符要写出来,可以在接口里面写方法体的方法

default void add(){}

instanceof判断真实类

shape instanceof Circle

如果后面是一个范围更大的类或是接口,即(父类或是父接口)则也为真

public class A extends M implements B,C{}
A a = new A();
if(a instanceof M){}
if(a instanceof B){}
if(a instanceof C){}
//都为真

例如学生类是人类的子类,是微生物的子类(但是instanceof后跟的是学生类、人类、微生类也为真)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值