Java构造器与继承
1.Java中构造函数(又称Java构造器):
理解:Java中的构造函数和C++中的构造函数很类似,但在C++中还会存在相应的析苟函数用来释放构造函数的内存,但Java中却不存在析构函数,因为Java中有垃圾自动回收机制,好比一个扫地阿姨,定时清理Java中产生的垃圾,释放内存;
作用:用于构造当前类的对象,在构造对象时直接进行赋值操作
注意:
1)任何一类都会有默认的构造方法
public 类名(){}
2)构造方法有返回值,返回内存地址,方便对其进行引用
内存中分为栈空间和堆空间,栈空间用于存储变量等,堆空间存储的是对象的具体代码),然后拷贝当前类的数据到空间中进行存储
public class Student {
public Student(){
System.out.println("执行了构造方法");
}
}
public class Test {
public static void main(String[] args) {
Student stu = new Student();
}
}
运行结果:
附图如下:
2、Java中的方法重载
理解:跟C++中的方法重载类似,同样的方法名,但参数类型,个数,顺序不同;
定义:同一个类当中,多个方法的方法名相同、参数列表不同(参数个数、顺序、类型)
作用:体现做同样一件事情的不同流程
注意:返回类型没有约束,可以随意进行更换
使用:调用重载方法时候,系统会根据调用时候传递的具体参数来匹配调用哪个重载方法
代码说明:
public class Student {
public void study(){
System.out.println("无");
}
public void study(int a){
System.out.println("a");
}
public void study(int a,int b){
System.out.println("a");
}
public void study(String a){
System.out.println("a");
}
}
public class Test {
public static void main(String[] args) {
Student stu = new Student("张三");
stu.study(10);
stu.study(10, "aa");
}
}
运行结果:
构造方法重载:
1)如果重载了构造方法,则默认无参的构造方法就不存在了,还需要则要显性定义出来
2)作用可以用于初始化当前对象的一些属性
public class Student {
public String name;
public Student(){}//默认构造方法,如果重载了构造方法,则默认无参的构造方法就不存在了,还需要则要显性定义出来,
public Student(String n){
name = n;
}
}
public class Test {
public static void main(String[] args) {
Student s= new Student();
Student stu = new Student("张三");
System.out.println(s.name);
System.out.println(stu.name);
}
}
运行结果:
3、Java中的继承
继承:一个类可以通过继承关系,把当前类的属性和方法传递下去
注意:1)子类继承父类,会拥有父类所有非私有的属性和方法
2)子类拥有的属性和方法必然会比父类更加全面
3)动态拓展子类中的方法和属性
父类D:
public class D {
public void t(){
System.out.println("执行D的t方法");
}
}
子类A:
public class A extends D{
public void fun(){
System.out.println("You are very fun!");
}
}
测试类:Test
public class Test {
public static void main(String[] args) {
A a = new A();
a.t();
a.fun();
}
}
运行结果:
4、Java中方法的重写
定义:子类继承父类,子类定义一个和父类方法名相同、参数列表相同、返回类型相同的方法,体现的是方法重写
目的:就是为了完成子类修改父类方法的执行过程
注意:
1)方法重写必须建立在继承的前提下
子类定义的方法和父类继承过来的方法方法名、返回值类型、参数列表必须完全相同
子类定义的方法访问权限不能缩小,只能扩大或者保持一致
public class A extends D{
//重写从D中继承的t方法
public void t(){
System.out.println("执行A中的方法");
}
public void fun(){
System.out.println("You are very fun!");
}
}
运行结果:
5、Java自动转型和多态
自动转型:子类的对象自动转型为父类的类型
注意:如果转型后的对象调用方法,这个方法如果子类重写了,则执行的是重写后的,如果没有重写,则调用的是父类的
多态:多个同一个类型的对象,调用同一个方法,执行的过程不一样,多态的前提是有继承关系并且子类中重写了父类当中的某些方法;
子类B:
public class B extends D{
public int age;
public void test(){}
public void t(){
System.out.println("执行B的t方法");
}
}
测试类:Test
public class Test {
public static void main(String[] args) {
B b = new B();
b.t();
//自动转型:D是B的父类
D entity = new B();
D entity1 = new D();
entity.t();
entity1.t();
}
}
运行结果:
6、this关键字
代表一个对象,当前类的对象
如何区分this当前所代表是哪个类的对象:
首先看this是不是在当前类中使用,如何是,那么this代表的就是当前类的对象,如果this在某一方法中使用,那么看这个方法是哪个类调用的,this属于调用该方法的类的对象
注意:this是动态变化的,不是不变的,可能this现在代表的是这个类的对象,等会可能代表的是另一类的对对象了;生活中常说这个人,指的是现在在你面前的人,可能等会再说这个人就不是同一个人了;
7.心得体会
虽然这些知识曾经在课堂上学习过,但温故而知新,这次学习一方面加深了对这些知识的理解,同时,把以前学的不是很好的多态以及Java中引用、返回值等方面的知识更加深入的理解了。