1. 构造方法:构造函数、构造器、构建器----------------------------------复用给成员变量赋初值
-
作用:给成员变量赋初始值
-
语法:与类同名,没有返回值类型(连void都没有)
-
调用:在创建(new)对象时被自动调用
-
若自己不写构造方法,则编译器默认提供一个无参构造方法,若自己写了构造方法,则不再默认提供
-
构造方法可以重载
public class Student { String name; int age; String address; //给成员变量赋初始值 Student(String name,int age,String address){ this.name = name; this.age = age; this.address = address; } void study(){ System.out.println(name+"在学习..."); } void sayHi(){ //默认给了咱们一个this System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address); } } public class ConsDemo { public static void main(String[] args) { //Student zs = new Student(); //编译错误,Student类中没有无参构造方法 Student zs = new Student("zhangsan",25,"LF"); Student ls = new Student("lisi",24,"JMS"); zs.sayHi(); ls.sayHi(); } }
2. this:指代当前对象,哪个对象调用方法它指的就是哪个对象
只能用在方法中,方法中访问成员变量之前默认有个this.
this的用法:
-
this.成员变量名----------------------访问成员变量
当成员变量与局部变量同名时,若想访问成员变量则this不能省略
-
this.方法名()---------------------------调用方法(一般不用-----------了解)
-
this()-------------------------------------调用构造方法(一般不用-----了解)
3. null:表示空,没有指向任何对象。
- 若引用的值为null,则该引用不能进行任何点操作了,若操作则发生NullPointerException空指针异常。
4. 引用类型数组:
-
给引用类型数组元素赋值时,需要new个对象
ObserveSubmarine[] oses = new ObserveSubmarine[3]; oses[0] = new ObserveSubmarine(); oses[1] = new ObserveSubmarine(); oses[2] = new ObserveSubmarine();
-
若想访问元素的数据,需要通过数组元素去打点
ObserveSubmarine[] oses = new ObserveSubmarine[3]; //创建侦察潜艇数组对象 oses[0] = new ObserveSubmarine(); //创建侦察潜艇对象 oses[1] = new ObserveSubmarine(); oses[2] = new ObserveSubmarine(); System.out.println(oses[0].y); //输出第1个侦察潜艇的y坐标 oses[1].speed = 3; //修改第2个侦察潜艇的速度为3 oses[2].move(); //第3个侦察潜艇移动 for(int i=0;i<oses.length;i++){ //遍历所有侦察潜艇 System.out.println(oses[i].x+","+oses[i].y); //输出每个潜艇的x和y坐标 oses[i].move(); //每个潜艇移动 } ObserveSubmarine[] oses = new ObserveSubmarine[]{ //此写法,了解即可 new ObserveSubmarine(), new ObserveSubmarine(), new ObserveSubmarine() };
5. 继承:
-
作用:代码复用
-
通过extends来实现继承
-
超类/父类:共有的属性和行为
派生类/子类:特有的属性和行为
-
派生类既可以访问派生类的,也可以访问超类的,但超类不能访问派生类的
-
一个超类可以有多个派生类,一个派生类只能继承一个超类--------------单一继承
-
具有传递性
-
java规定:构造派生类之前必须先构造超类
-
在派生类的构造方法中若没有调用超类构造方法,则默认super()调用超类的构造方法
-
在派生类的构造方法中若自己调用了超类构造方法,则不再默认提供
注意:super()调用超类构造方法,必须位于派生类构造方法的第一行
-
6. super:指代当前对象的超类对象
super的用法:
-
super.成员变量名--------------------访问超类的成员变量(一般不用,了解)
-
super.方法名()-------------------------调用超类的方法
-
super()-----------------------------------调用超类的构造方法
public class SuperDemo { public static void main(String[] args) { Boo o = new Boo(); } } //演示派生类中调用超类的有参构造方法 class Coo{ Coo(int a){ } } class Doo extends Coo{ Doo(){ super(5); } /* //如下代码为默认的 Doo(){ super(); } */ } //演示派生类中默认调用超类的无参构造方法 class Aoo{ Aoo(){ System.out.println("超类的构造方法"); } } class Boo extends Aoo{ Boo(){ super(); //默认的,调用超类的无参构造方法 System.out.println("派生类的构造方法"); } }
7. 向上造型:就是在多态
-
超类型的引用指向派生类的对象
-
能点出来什么,看引用的类型------------这是规定,记住就可以了
何时向上造型:
-
多种角色能干的事都一样的时候,可以将多种角色统一造型到超类数组中,实现代码复用
-
大敌机/小敌机/红敌机,都能被炸弹打-----------说明干的事都一样
-
就可以将三种敌机统一造型到SeaObject数组中,这样仅需要一个for即可----------代码复用
public class UploadDemo { public static void main(String[] args) { Eoo o1 = new Eoo(); o1.e = 1; o1.show(); //o1.f = 2; //编译错误,超类不能访问派生类的 //o1.test(); //编译错误 Foo o2 = new Foo(); o2.f = 1; o2.test(); o2.e = 2; //正确,派生类可以访问超类的 o2.show(); //正确 //能点出来什么,看引用的类型------------这是规定,记住就可以了 Eoo o3 = new Foo(); //向上造型 o3.e = 1; o3.show(); //o3.f = 2; //编译错误,o3是Eoo类型,所以只能访问Eoo里面的 //o3.test(); //编译错误 } } class Eoo{ int e; void show(){ } } class Foo extends Eoo{ int f; void test(){ } }
-