-
什么是类?什么是对象?
-
现实生活中是由很多很多对象组成的,基于对象抽出了类
-
对象:软件中真实存在的单个个体/东西
类:类别/类型,代表一类个体
类是对象的模子,对象是类的具体的实例
类中可以包含:
对象的属性/特征-----------------------成员变量
对象的行为/动作-----------------------方法
一个类可以创建多个对象
例子:________________________________________________________________________
-
方法的重载(overload/overloading):---------------更加方便用户的访
-
发生在同一类中,方法名相同,参数列表不同
-
编译器在编译时会
ublic class OverloadDemo { public static void main(String[] args) { Aoo o = new Aoo(); o.show(); //编译器根据方法的签名自动绑定方法 o.show("zhangsan"); o.show(25); o.show("zhangsan",25); o.show(25,"zhangsan"); } } class Aoo{ void show(){} void show(String name){} void show(int age){} void show(String name,int age){} void show(int age,String name){} //int show(){ return 1;} //编译错误,重载与返回值类型无关 //void show(String address){} //编译错误,重载与参数名称无关 }
根据方法的签名自动绑定方法
public class Test { public static void main(String[] args) { //创建对象 Students mingren = new Students("鸣人", 28, "木叶");// //调用方法 mingren.show(); mingren.show("卡卡西",35); } } /**创建一个Students类*/ class Students { //成员变量 String name; int age; String address; /**构造学生类,带参*/ Students(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } /**方法*/ public void show() { System.out.println("我的名字叫:" + name + ",年纪:" + age + ",地址:" + address + "。"); } /**重载方法*/ void show(String name,int age){ System.out.println("他的名字:"+name+"年纪为"+age); } }
构造方法:构造函数、构造器、构建器---------复用给成员变量赋初值代码(如上图)
作用:给成员变量赋初始值
与类同名,没有返回值类型(连void都没有)
在创建(new)对象时被自动调用
若自己不写构造方法,则编译器默认提供一个无参构造方法,若自己写了构造方法,则不再默认提供
构造方法可以重载
this:指代当前对象,哪个对象调用方法它指的就是哪个对象
只能用在方法中,方法中访问成员变量之前默认有个this.
this的用法:
this.成员变量名-------------访问成员变量成员变量与局部变量同名时,若想访问成员变量则this不能省略
、 -
this.方法名()-----------------调用方法(了解)
-
this()---------------------------调用构造方法(了解)
-
null:表示空,没有指向任何对象
若引用的值为null,则该引用不能进行任何点操作了,
若操作则发生NullPointerException空指针异常 -
内存管理:由JVM来管理的
堆:new出来的对象(包括成员变量)
栈:局部变量(包括方法的参数)
成员变量:写在类中,方法外--------有默认值
局部变量:方法中------------------------没有默认值数组也是一个对象,所以数组对象也存储在堆中,
将数组的元素当作成员变量一并存储在堆中内存图:
引用类型数组:
- 与基本类型数组的区别:
- 给数组元素赋值必须new一下
- 若想访问对象数据必须通过数组元素打点
Student[] stus = new Student[3]; //创建Student数组对象 stus[0] = new Student("zhangsan",25,"LF"); //创建Student对象 stus[1] = new Student("lisi",26,"JMS"); stus[2] = new Student("wangwu",24,"SD"); System.out.println(stus[0].name); //输出第1个学生的名字 stus[1].age = 28; //修改第2个学生的年龄为28 stus[2].sayHi(); //第3个学生跟大家问好 for(int i=0;i<stus.length;i++){ //遍历所有学生 System.out.println(stus[i].name); //输出每个学生的名字 stus[i].sayHi(); //每个学生跟大家问好 }
____________________________________________________________
-
继承:
- 作用:代码复用
- 通过extends来实现继承
- 超类/父类:共有的属性和行为
派生类/子类:特有的属性和行为
- 派生类既能访问自己的,也能访问超类,但是超类不能访问派生类的
- 一个超类可以有多个派生类,一个派生类只能有一个超类---------单一继承
- 具有传递性
- java规定:构造派生类之前必须先构造超类
- 在派生类的构造方法中若没有调用超类的构造方法,则默认super()调用超类的无参构造方法
- 在派生类的构造方法中若自己调用了超类的构造方法,则不再默认提供
> super()调用超类构造方法,必须位于派生类构造方法的第1行super:指代当前对象的超类对象
super的用法:
super.成员变量名---------------------访问超类的成员变量
super.方法名()-------------------------调用超类的方法--------------明天下午讲
super()-----------------------------------调用超类的构造方法
package homework328; //超类 public class Teacher { String name; int age; Teacher(String name,int age){ //构造 this.name=name; this.age =age; } public int num(int num1,int num2){//有返回值有参方法 int num3=num1+num2; return num3; } public void show(){ System.out.println("我的名字叫:"+name+"年龄:"+age);//普通方法 } } __________________________________________ //子类 package homework328; public class Student extends Teacher{ int num1;//特有属性 Student(String name, int age,int num1) { //子类构造 super(name, age); this.num1=num1; } public void num() { super.num(33,33); //用超类方法 super.show(); } @Override public void show() { //重写超类show方法 System.out.println("帅气"); } } ___________________________________________________________ //运行结果 public class Test { public static void main(String[] args) { Teacher[] teachers= new Teacher[3]; teachers[0]= new Teacher("纲手",29); teachers[0].show(); System.out.println("求和"+teachers[0].num(4,4)); teachers[1] = new Student("牛逼",33,00); System.out.println("22+33="+teachers[1].num(22,33)); teachers[1].show(); ___________________________ 我的名字叫:纲手年龄:29 求和8 22+33=55 帅气 ______________________________ } }