类与对象、子类与继承、接口与实现

类与对象

包(package)

文件夹
package必须是程序的第一条执行代码,注释除外
一个java文件中只能有一个
没有package,默认无名包(default)
包中文件名不能相同,规则和文件夹命名规则类似

是对一个事物的描述
属性(变量):事物的具体信息
行为(方法):事物要做的事情
类的导入:import
类的声明:

class 类名{
		类体:
			变量的声明:成员变量/域变量;
					默认值:整型:0char:‘\0’(空字符);
							浮点型:0.0booleanfalse;
							引用类型:null;
			方法的定义;
}

方法

格式:

类型 名称(){
	方法体
}

注:当在方法中声明变量时,声明的变量为局部变量,只在方法中有效,如果变量声明在复合、循环语句中,也就在该语句中可用,局部变量没有默认值。

当局部变量和成员变量名字相同时,使用this区分,this在此代表的是成员变量
例如:

class demo{
	int i = 1,a;
	void add(){
		int i = 2;
		a = i + this.i;//这里的this指的是成员变量
	}
}

构造方法

类名(){
}

默认无参,并且没有方法体

对象

类名 对象名;

传值

值传递

static

静态(static)修饰如下:

  1. 变量:称为类变量、静态变量
  2. 方法:称为类方法、静态方法
  3. 代码块:称为静态代码块
  4. 嵌套类:称为静态内部类

静态变量

类的成员变量可以分为以下两种:
静态变量(或称为类变量),指被 static 修饰的成员变量。
实例变量,指没有被 static 修饰的成员变量。
静态变量与实例变量的区别如下:
1)静态变量
运行时,Java 虚拟机只为静态变量分配一次内存,加载类过程中完成静态变量的内存分配。
在类的内部,可以在任何方法内直接访问静态变量。
在其他类中,可以通过类名访问该类中的静态变量。
2)实例变量
每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。
在类的内部,可以在非静态方法中直接访问实例变量。
在本类的静态方法或其他类中则需要通过类的实例对象进行访问。
静态变量在类中的作用如下:

静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之间的交互性。
如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而节省内存空间。例如,在类中定义一个静态常量 PI。
静态变量的好处:它能使程序存储器高效(即它节省内存)。

静态方法

同成员变量,成员方法也可以分为以下两种:

静态方法(或称为类方法),指被 static 修饰的成员方法。
实例方法,指没有被 static 修饰的成员方法。
静态方法与实例方法的区别:

静态方法,属于类,而不属于类的对象。
1)它通过类直接被调用,无需创建类的对象。
2)静态方法中,不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法;
3)静态方法中,可以直接访问所属类的静态变量和静态方法。
4)同this 关键字,super 关键字也与类的实例相关,静态方法中不能使用 super 关键字。
实例方法,可直接访问所属类的静态变量、静态方法、实例变量和实例方法。
静态方法与静态变量好处:

  1. 属于类级别,无需创建对象就即可直接使用,使用方便。
  2. 全局唯一,内存中唯一,静态变量可以唯一标识某些状态。
  3. 类加载时候初始化,常驻在内存,调用快捷方便。
    静态方法与静态变量缺点:
  4. 静态方法不能调用非静态的方法和变量。
    2.不能使用this和super关键字。
    静态方法与静态变量适用场景:
  5. 静态方法,最适合工具类中方法的定义;比如文件操作,日期处理方法等。
    2.静态方法,适合入口方法定义;比如单例模式,因从外部拿不到构造函数,所以定义一个静态的方法获取对象非常有必要。
    3.静态变量适合全局变量的定义;举例:用一个布尔型静态成员变量做控制标志。

方法重载

方法名相同,参数不同
即:
参数个数不一样
参数类型不一样
注:参数名无关紧要

访问权限

共有:public
私有:private
受保护:protected
友好:不写修饰符,默认为友好

子类与继承

格式:

class 子类 extends 父类{
}

子类的继承性

java中只支持单继承(即一个子类只能有一个父类),可以通过接口(interface)实现多继承
一个父类可以有多个子类,一个子类可以有多个父类。
当子类与父类在同一个包:
除了父类的私有(private)变量与方法,其他都可以继承为自己的成员变量和方法,访问权限不变。
当子类与父类不在同一个包:
除了父类的私有(private)和友好权限的成员变量和方法,其他的子类都可以继承。

成员变量的隐藏

子类声明的成员变量与从父类继承的成员变量名字相同时,则会隐藏从父类继承来的成员变量
子类对象以及子类自定义的方法操作与父类同名的成员变量时,这里指的就是子类声明的变量
子类继承的父类方法,操作的依然是子类继承至父类或者被子类隐藏的成员变量

方法重写

可以理解为子类对继承至父类的方法的隐藏
重写规则:
方法的名称与类型、参数个数、参数类型都必须与父类的一致,只有方法体不同
父类的静态方法不可以被子类重写
重写的方法可以操作继承的成员变量、调用继承的方法,也可以使用子类自定义的变量与方法,但是无法操作被子类隐藏的变量与方法,如果子类想要使用被隐藏的变量与方法,必须使用super关键字

super

被子类隐藏的成员变量和方法不在被子类拥有,而是归属于super,想要使用隐藏的变量与方法时,要使用super
子类的构造方法需要使用super来调用父类的构造方法,并且super必须是子类构造方法中的第一条语句,当没有写super时,默认为super(),即默认调用父类的无参构造方法。

final

final可以修饰类,方法,成员变量和方法中的局部变量
可以理解为被final修饰的,就是不能被更改的
final类不允许有子类。
final修饰的方法只能被继承,不能被重写。
final修饰的变量称为常量。
常量没有默认值,所以常量在声明时必须赋初值。
常量在运行期间无法被改变。

上转型对象

父类 对象名 = new 子类();
可以理解为有子类向上转为更高的父类。
上转型对象不能访问子类新增的(自定义)变量与方法。
可以使用子类继承或隐藏的成员变量,也可以调用子类继承或重写的方法

abstract

abstract修饰的类叫做抽象类
abstract修饰的方法叫抽象方法
抽象类既可以有抽象方法又可以没有抽象方法
抽象方法只能声明不能实现,也就是不能写出方法体。
不能使用final与abstract同时修饰一个类或方法。
不能使用static、private修饰abstract方法。
非抽象子类:
该子类在继承抽象类时,必须重写抽象类的抽象方法,给出方法体。
抽象子类:
该子类可以重写父类方法,也可以直接继承父类方法。

注:
abstract类不能创建对象,但是可以作为子类的上转型对象,来调用子类重写的方法。

接口与实现

接口(interface)

声明:

interface 接口名{
	接口体
}

接口体中有常量、抽象方法、default方法(JDK8开始允许使用)、static方法(JDK8)
接口体中没有变量,只有常量。
接口中的抽象方法都是用public修饰,并且可以省略public和abstract。
接口体中的所有static常量的访问权限都是public,并且可以省略public、static、final。

接口的实现:

class 类名 implements 接口1,接口2,.....{
}

一个类可以实现多个接口,即完成多继承功能

接口方法的重写
当一个非抽象类实现了接口,那么必须重写接口中的抽象方法。
当一个抽象类实现了接口,可以选择重写抽象方法,也可以选择直接继承抽象方法。
接口中除了私有(private)方法以外,其他的都默认是public,所以在重写时不能省略public

public接口可以被任何一个类实现,如果不写修饰符,那么默认为友好型,只能被同包的类实现。
父类实现了某个接口,子类那么也实现了该接口,子类就不用显式的使用implements实现该接口了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只会偷懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值