1、类1.1 类和方法声明
类声明:class 类名{ 类体 }
方法声明:返回类型 方法名(参数){ return 返回值;}
1.2 成员变量和局部变量
成员变量和局部变量: ①成员变量生命在类体中,在整个类内都有效。局部变量声明在方法中,从声明它的位置之后开始有效。 ②局部变量与成员变量的名字相同,那成员变量被隐藏,如果想使用则用this关键字。 ③成员变量有默认值,局部变量没有默认值。
注意:对成员变量的操作只能放在方法中,方法使用各种语句对成员变量和局部变量进行操作。
2、构造方法与对象的创建2.1 构造方法
① 默认构造方法 : 类名() {执行语句;}
② 自定义构造方法:类名(参数){执行语句;}
注意:允许在一个类中编写若干个构造方法,但必须保证他们的参数不同。如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法无参,且方法体中没有语句。(如果类里定义了多个构造方法,那Java不提供默认构造方法)
2.2 创建对象
User user = new User();
2.3 参数传值
对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别。
参数类型:基本数据类型、引用类型。
3、实例成员与类成员3.1 实例变量和类变量
它俩都属于成员变量,用关键字static修饰的称作类变量,否则称作实例变量。
实例变量和类变量的区别:① 不同对象的实例变量互不相同。② 所有对象共享类变量,当使用new运算符创建多个不同对象时,分配给这些对象的类变量占有相同一处内存。③ 通过类名直接访问类变量,如果类没有创建对象,那类中的实例变量不会被分配内存,但类变量会被分配内存。
3.2 实例方法和类方法
用关键字static修饰的方法成为类方法,否则称作实例方法。
实例方法和类方法的区别:① 实例方法中不仅可以操作实例变量,也可以操作类变量,而类方法中不可以操作实例变量。② 可使用类名直接调用类方法。
4、方法重载
方法名相同、参数个数不同、参数类型不同。(返回类型和参数名字不参与比较)
float hello(int a,int b){ return a+b;} double hello(double a,double b){return a*b;}
5、import语句
① 用于引入包中的类和接口,写在package语句和类定义之间。
② 引入一个包中的全部类:import java.util.* 引入java.util包中的Date类:import java.util.Date
③ 如果没用import引入包中的类,也可以直接带着包名使用该类: java.util.Date date = new java.util.Date();
6、访问权限
public:“公共的”,被其修饰的类、属性和方法不仅可以跨类访问,而且允许跨包访问。
protected:“受保护的”,这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问的。
default:“包访问权限”,只对同包的类具有访问的权限,外包的所有类都不能访问。
private:“私有的”,被其修饰的属性及方法只能被该类的对象访问,其子类不能访问,更不允许跨包访问
class Student extends People{...}
子类的继承性:① 子类拥有父类非private的属性和方法。(不继承父类构造方法) ② 子类可以拥有自己的属性和方法,对父类进行扩展。 ③ 单继承,多重继承。 ④ 如果子类和父类不在同一包中,子类不继承父类的友好成员变量。(当用子类构造方法创建一个子类对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也被分配了内存空间)
2、成员变量的隐藏和方法重写
所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明类型可不同),在这种情况下,子类就会隐藏所继承的成员变量。想要使用则需使用super关键字。
方法重写:重写从父类继承来的方法,且这个方法的名字、参数个数、参数类型和父类方法完全相同。(重写不允许降低方法的访问权限,但可以提高)
3、super关键字
① 用来调用父类被隐藏的成员变量或方法。
② 用来调用父类的构造方法,当用子类构造方法创建对象时,子类构造方法总是先调用父类的构造方法。 super();
4、final关键字
final类:final类不能被继承
final方法:不允许子类修改继承的方法
常量:在声明时没有默认值,所以要求程序在声明常量时必须指定该常量的值,而且常量在运行期间不允许再发生变化。
5、对象上转型
① 上转型对象不能操作子类新增的成员变量和方法。 ② 上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。
6、抽象类和抽象方法
abstract class A{ abstract void speak(); abstract void cooking(){方法体} }
① 抽象类中可以有抽象方法,也可以有非抽象方法。 ②抽象方法只允许声明,不允许实现。 ③ 不允许使用final和static修饰抽象方法。 ④ 继承抽象类时必须重写它所有的抽象方法。 ⑤ 抽象类不允许创建对象
interface A { public static final int MAX = 100; public abstract void setA(int a);}
① 用interface来定义一个接口
② 接口体中只有抽象方法且访问权限为public(允许省略public和abstract修饰符)。
③ 接口体中常量的访问权限为public,而且是static常量(允许省略public、final和static修饰符)
④ 可直接使用(接口名.常量)访问接口中的常量。
等价写法:
interface A { int MAX = 100; public void add();}
2、实现接口
public class B implements A{ int a; public void setA(int a){this.a = a;} }
① 用implements声明该类实现一个或多个接口。
② 如果一个非抽象类实现了某个接口,那这个类必须重写这个接口中的所有方法,而且方法的访问权限一定要显示的用public来修饰。
③抽象类可以重写接口中的方法,也可以直接拥有接口中的方法。
3、接口回调
可以把实现某一接口的类创建的对象的引用赋值给给接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法。
A a; B b = new B(); a = b;
4、抽象类与接口的比较
① 抽象类和接口中都可以由抽象方法。
② 接口中只能有常量,不能有变量;而抽象类中既可以有常量也可以有变量。
③ 抽象类中可以有抽象方法也可以有非抽象方法,接口不行。