一、类(class)
(一)类(class)
1、成员:
属性:
属性是静态的,属性的创建格式 (修饰符 数据类型 属性名字)
public String name
方法:
方法是动态的,方法的创建格式(修饰符 返回值类型 方法名(参数列表) {})
public void eat() {
我是一个吃饭方法
}
构造方法:
(1)作用:给对象的数据进行初始化
(2)格式:权限修饰符 与类名相同的方法名(参数) {}
(3)调用:通过new调用(类名 对象名=new 类名(参数))
(4)特点:方法名与类名相同,无返回值类型,无void
如果不提供构造方法,系统会给出默认的构造方法
如果提供构造方法,系统则不会再提供
程序块:
作用:跟普通方法相同
写法:可以认为程序块是一个没有修饰符,没有返回值,没有参数,没有名字的特殊方法。只有{ }用法:程序块的执行也需要调用,每次我们调用构造方法是,系统会自动为我们调用。
返回值:
事情做完之后留下的结果(1个)
若返回值类型为void,则无法接收
参数:
事情做之前,必须提供的条件(可多个)
2、类中对象的创建:
格式:
类名 对象名 = new 类名();
使用:
使用属性:对象名.变量名
Class c = new Class(); <创建一个叫c的对象>
c.name; <调用name属性>
使用方法:对象名.方法名
Class c = new Class(); <创建一个叫c的对象>
c.eat(); <调用eat方法>
(二)成员变量和局部变量
区别:
1、在类中的位置不同:成员变量指的是属性,在类范围内定义的变量
局部变量是在一个方法内定义的变量
2、在内存中的位置不同:成员变量在堆内存中
局部变量在栈内存中
3、生命周期不同:成员变量随着对象的创建而存在,随着对象的消失而消失
局部变量随着方法的调用而存在,随着方法的调用完毕而消失
4、初始化值不同:成员变量有默认初始化值
局部变量没有默认初始化值,必须定义,赋值,然后才可以使用
5、注意事项:局部变量名称和成员变量名称可以相同,但在方法中使用时,采用的时就近原则
(三)关键字
1、this和super关键字:
(1)this关键字:代表本类对应的引用
super关键字:代表父类存储空间的引用
(2)this可以调用方法,属性
super也可调用方法,属性
(3)this必须在构造方法调用另外一个构造方法,以this();的形式,省略名字且必须在第一行,不可来回调用
2、权限修饰符关键字:
(1)种类:
|public|protected|默认不写|private|
|公开的|受保护的|默认的|私有的|
(2)private介绍:
可以修饰成员(属性和方法)
被private修饰的成员只有在本类中才能访问
3、特征修饰符关键字
(1)种类:
|final|static|abstract|native|
|最终的|静态的|抽象的|本地的|
(2)final介绍:
1.修饰变量:如果定义变量时无初始值,只给一次赋值机会
如果变量为基本类型,则值不让更改
如果变量为引用类型,则地址引用不可改变
2. 修饰属性:用final修饰必须赋初始值
3. 修饰方法:用final修饰,要求不可被子类重写
4. 修饰类:用final修饰,此类不可被其他子类所继承
(3)static介绍:
1.可以修饰变量、属性、方法、类
2. 特点:
静态区在类加载时已初始化
静态元素只加载一次,全部类对象及本身共享
可通过类名直接调用
非静态成员和静态成员均可访问静态成员
静态不可访问非静态
静态元素不可出现this和super
(4)abstract介绍(暂时不细说)
abstract既可以表示一个关键字,也可以表示为一个类,抽象类
类的初始化过程:
Student s = new Student();s对象的创建在内存中做了哪些事情?
1.加载Student.class进内存
2.在栈内存内为s开辟空间
3.在堆内存内为学生对象开辟空间
4.对学生对象的成员变量进行默认初始化
5.对学生对象的成员变量进行显示初始化
6.通过构造方法对学生对象的成员变量赋值
7.学生对象初始化完毕,把对象地址赋值给s变量
二、接口(interface)
(一)特点:
1、接口用关键字interface表示
interface 接口名 {}
2、接口一般用来制定规则
3、类实现接口用implements表示
class 类名 implements 接口名 {}
4、接口的子类
可以是抽象类,但是意义不大
可以是具体类,要重写(override)接口中所有的抽象方法
5、接口不可实例化,按照多态的方式来实例化
(二)成员的特点:
1、成员变量:只能是常量,并且是公有的静态的
*默认修饰符:public static final
2、构造方法:接口没有构造函数
3、成员方法:只能是抽象方法,并且是公有的
*默认修饰符:public abstract
注意:接口无法创建对象,只能通过子类多实现来做事
public class A implements B {}
或者
public class A implements B,C,D {}
(三)类与类:
类与类之间继承关系,只有单继承,但可以多层继承
(四)类与接口:
实现关系,可以单实现,也可以多实现,并且还可以在继承一个类的同时实现多个接口
(五)接口与接口:
继承关系,可以单继承,也可以多继承
三、抽象类与接口的区别
(一)成员区别
抽象类:
成员变量可以为变量,也可以为常量
构造方法有 成员方法可以抽象,也可以非抽象
接口:
成员变量只可以为常量
成员方法只可以为抽象
(二)关系区别:
类与类:继承,单继承
类与接口:实现,单实现,多实现
接口与接口:继承,单继承,多继承
(三)设计理念区别:
抽象类:被继承体现的是“is a”的关系,抽象类肿定义的是该继承体系的共性功能
接口:被实现体现的是“like a”的关系,接口中定义的是该继承体系的扩展功能
(四)形式参数区别:
引用类型:
类:需要的是该类的对象
抽象类:需要的是该抽象类的子类对象
接口:需要的是该接口的实现类对象
(五)返回值类型区别:
引用类型:
类:返回的是该类的对象
抽象类:返回的是该抽象类的子类对象
接口:返回的是该接口的实现类对象