一、
- 类和对象
(一)类是对同一类对象的属性和行为的封装。
(二)类的定义
定义了数据类型;类的定义不能是Java中的关键字(可由字母、下划线、数字或美元符号组成且第一个字符不可以是数字)。
Grammar:
class类名{}
- 使用类实例化对象
定义类的“变量”叫做实例化对象(Object);如果不用关键字new分配内存,该对象为空值,不能使用。
Grammar:
类名 对象名 =new 类名();
- 访问对象中的成员变量
局部变量作用于小且不赋值会报错;
成员变量作用域大,可赋值也可不赋值,不赋值则系统给定默认值,instance:0、0.0、false、null。
Grammar:
对象名.成员变量名;
- 对象的引用性质
和数组名一样,对象名赋值只是将引用赋值,并不是将对象中的内容赋值。
- 成员函数
(一)简单的成员函数与调用方法
Grammar:
void函数名称(){}
对象名.函数名();
- 带参数的成员函数
Grammar:
void函数名称(类型1参数名1,类型2参数名2,...类型n参数名n){}
对象名.函数名(参数值列表);
Attention:若函式的内部变量和类中的成员变量重名时可用“this”识别,以防成员变量被屏蔽。
- 带返回类型的成员函数
Grammar:
返回类型 函数名称(类型1参数名1,类型2参数名2,...类型n参数名n){
return和函数返回类型一致的某个变量或对象;
}
对象名.函数名(参数值列表);
Attention:
(1)int abs(int a)定义了函数abs,返回一个整数类型的值
(2)int result=c.abs(-10);表示调用该函数,将返回值存入result变量
(3)若函数中途return则跳出,instance:
class Calc{
Int abs(int a){
If(a>0){
Return a;
}
Return-a;
}
}
- 没有返回类型的函数也可以使用return,表示跳出该函数,但是不能return一个人具体的值,instance:
void fun(int a){
...
Return;
...
}
- 在有些文献中,成员函数也称为成员方法(Method)。成员函数和成员变量统称为成员。
(四)函数参数的传递
(1)简单数据类型采用值传递,instance:
class Calc{
void fun(int a){
a=a+1;
}
}
public class ObjectTest{
public static void main(String args[]){
int a=10;
Calc c=new Calc();
c.fun(a);
System.out.println(“a=”+a);
}
}
输出a为10;整数属于简单数据类型,调用时不在一个内存单元,等于是main中的值复制给fun中的a了。
- 引用数据类型采用引用传递,instance:
class Calc{
void fun(int []arr){
a=rr[0]arr[0]+1;
}
}
public class ObjectTest{
public static void main(String args[]){
Int[] arr={10};
Calc c=new Calc();
c.fun(arr);
System.out.println(“arr[0]=”+arr[0]);
}
}
输出arr[0]为11;数组属于引用类型,虽不在一个内存单元,但指向同一个数组数组内存空间。
- 函数重载(Overload)
方法重载又称静态多态,方法重载必须满足:
(1)参数的个数不同
(2)参数的个数相同,类型不同
(3)参数的个数相同、类型相同,但在参数列表中出现的顺序不同
- 构造函数
Grammar:
类名 对象名 =new 类名(传给构造函数的参数列表)
Attention:
(1)当一个类的对象被创建时,构造函数就会被自动调用;
(2)构造函数可以被重载;
(3)一个类中如果没有定义构造函数,系统会自动生成一个默认的构造函数,该函数没有参数不做任何事情。
二、
- 静态变量和静态函数
- 静态变量应用
(1)保存跨对象信息;
(2)保存对象个数。
(二)静态函数
访问静态函数的Grammar:
类名.函数名;对象名.函数名;
代码块:
局部代码块{}方法
构造代码块{}类
静态代码块static{}
Attention:只运行一次。
- 封装的实现
(1)将不能暴露的成员隐藏(方法:private);
(2)用公共的方法暴露对该隐藏成员的访问(方法:public);
- 使用包
- 包
包的存在是为避免重名带来的麻烦
- 将类放入包中
定义Grammar:
Package 包名
- 访问包中的类
(1)在同一个包中,直接用类名访问,不用指定类所在的包
(2)两个类不在同一个包中,解决方法:
A:在使用类时指定类的路径,instance:
package chinesei;
class TeacherTest{
Public static void main(String[] args){
school.admin.Teacher = new school.admin.Teacher();
}
}
B:用import语句导入该类,instance:
package chinesei;
import school.admin.Teacher;
class TeacherTest{
Public static void main(String[] args){
Teacher teacher= new Teacher();
}
}
- 使用访问控制修饰符
()四个访问控制修饰符及其特性:
private:只能在定义它的类的内部被访问
default:可以在定义它的类的内部,也可以被这个包中的其他类访问
protected:可以在定义它的类的内部,也可以被这个包中的其他类访问
,还可以被包外的子类访问
public:可以在定义它的类的内部,也可以被包内、包外的所有其它类访问
Attention:一个Java文件中只能有一个public
因而,从开放程度上:private 顾名思义是在类中定义了类,也称为内部类 三、 (一)继承及实现 (1)被继承的类被称为为父类、基类、超类,继承的类被称为子类、派生类(子类拥有的特征多于父类) (2)Java不支持多重继承,但可以有多层继承。意思是一个子类只能有一个父类,允许A继承B、B又继承C。 (3)被继承的成员不可以是private,因为私有成员不允许在类的外部使用也不能被子类使用。(用setter和getter访问器访问) (4)不考虑特殊,子类从父类继承的成员可当作自己的成员使用 Grammar: this.title=title; (三)底层本质 实例化子类对象,系统会先调用父类无参数的构造函数去实例化一个父类对象。但如果父类没有无参数的构造函数,系统会在构造函数出报错,解决方案: (1)给父类增加一个不带参数的空构造函数 (2)在子类的构造函数中,第一句用super给父类构造函数传参数 Attention: super(title); 必须在第一句! (一)成员覆盖 子类中的成员函数的定义与父类相同,在子类中被隐藏。 (1)名称相同、参数列表相同、返回类型相同 (2)子类访问权限大于等于父类 Attention: Grammar: Super.函数名 Attention: A:函数重载是一种静态多态,下面为动态多态 B:父类和子类都有show函数,如果子类中没有则调用父类的,如果父类没有,则报错。 (一)使用多态 (1)函数传入的形参可以是父类类型,实际传入的可以是子类对象 (2)函数的返回类型是父类类型,而实际返回的可以是子类对象 instance: Dialog dialog= new FontDialog(); (2)父类类型对象转换成子类类型 严格来讲是不可以的,但可用强制类型转换,instance: Dialog dialog= new FontDialog(); FontDialog fd= (FontDialog)dialog; (一)抽象类 Attention: 抽象类必须被子类继承,子类必须重写抽象类 Grammar: abstract class 类名{ 实例方法(){} 抽象方法; } (二)接口 (1)接口不能实例化,只能有方法的声明,不能有方法的实现 (2)不需要指明abstract,默认为抽象函数;接口中定义的变量全是全局静态常量;通过extends继承另一个接口,类通过关键字implements可实现一个接口;一个类可以在继承一个父类的同时实现一个或多个接口,instance: class 子类 extends 父类 implements 接口1,接口2,...{} Grammar: 接口名 对象名 = new 实现类的构造方法 (1)用final修饰一个类,instance: final class FontDialog{} (2)用final修饰一个函数,instance: class FontDialog{ public final void show(); } (3)用final修饰一个成员变量,instance: Class Math{ public final double PI = 3.1415926; } 判断两个对象是否相等 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)