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();
}
}


  运行结果:

   

Java 继承enum java 继承 构造函数_Java构造函数


  附图如下:

   

Java 继承enum java 继承 构造函数_Java多态_02

   

Java 继承enum java 继承 构造函数_Java继承_03



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");
}
}

运行结果:

Java 继承enum java 继承 构造函数_Java继承_04


构造方法重载:

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);
}
}

运行结果:


Java 继承enum java 继承 构造函数_Java继承_05



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();
}
}

运行结果:


Java 继承enum java 继承 构造函数_Java构造函数_06



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!");
   }
}

运行结果:


Java 继承enum java 继承 构造函数_Java 继承enum_07




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();
}
}

运行结果:


Java 继承enum java 继承 构造函数_Java多态_08


   

6、this关键字   

代表一个对象,当前类的对象

如何区分this当前所代表是哪个类的对象:

首先看this是不是在当前类中使用,如何是,那么this代表的就是当前类的对象,如果this在某一方法中使用,那么看这个方法是哪个类调用的,this属于调用该方法的类的对象

注意:this是动态变化的,不是不变的,可能this现在代表的是这个类的对象,等会可能代表的是另一类的对对象了;生活中常说这个人,指的是现在在你面前的人,可能等会再说这个人就不是同一个人了;

 

7.心得体会

虽然这些知识曾经在课堂上学习过,但温故而知新,这次学习一方面加深了对这些知识的理解,同时,把以前学的不是很好的多态以及Java中引用、返回值等方面的知识更加深入的理解了。