2010/3/16学习笔记-day19

java-day19

目录

早上

 创建和初始化对象

内存图

 方法调用内存图

下午

构造器

构造器的作用

构造器的重载

编码转换

          继承

子类调用父类的构造器有俩种情况:


早上

OverLoadTest o = new OverLoadTest();
o.test(null);

注意,当有重载了多个方法,这些方法的参数都是引用类型的,这时候如果直接调用方法并传-一个null值,那么编译器有可能会编译报错,因为如果重载的这些方法的参数类型,有子父类关系的话,那么就优先调用子类型参数的方法,如果这些引用类型参数没有子父关系,那么编译就会报错。

 创建和初始化对象

使用new关键字创建对象的时候,除了分配内存空间以外,还会给对象中的属性做默认的初始化赋值,并且调用类中的构造器。

例如:

new Student(); 
//这个代码在main方法中执行了

1.给对象分配内存空间,并将对象中的属性进行初始化,数字类型的都是0,引用类型的都是null,布尔类型的都是false。

2.如果我们在对象中给这些变量做了显示赋值,那么就会用这个显示赋值,把之前的默认值给覆盖掉。

例如:

private String name = "Tom";

3.调用类中的构造器,执行构造器中的代码

注意,如果这时候有一个变量去接收了这个对象(=号赋值),那么这时就会返回这个对象的内存地址值给这个引用类型的变量。

例如:

//stu最终保存了对象的内存地址值。
Student stu  = new Student();

内存图

 方法调用内存图

 

下午

构造器

类中的构造器也称为构造方法、构造函数,是在创建对象的时候要调用的,且构造器有以下两个特点:

1、必须和类的名字保持一致

2、必须没有返回类型,也不能写void

构造器的作用

1、使用new关键字来创建对象的时候,后面跟的必须是类中存在的构造器

2、构造器中的代码,在对象创建后悔被调用,从而可以完成对象的初始化工作。

public class Student{
private String name;
public Student(){}
public Student(){
    this.name = "default-value";
}

构造器的重载

除了默认的无参构造器之外,很多时候我们会用到有参的构造器,在创建对象的时候,我们可以把参数传给构造器,然后完成对象的初始化工作。

编码转换

String str = "你好";
byte[] arr = str.getBytes();
System.out.println(Arrays.toString(arr));
String newStr = new string(arr);
System.out.println(newStr);

继承

1、继承是类和类之间的一种关系

java中的类和类之间的关系有很多种,继承只是一种,还有依赖、组合、聚合等。

2、继承关系的两个类,一个是子类(派生类),一个是父类(基类)

继承父类关键字extends

public class Student extends Person{
    
}

3、子类和父类的关系,从意义上讲是”is a“的关系

public class dog extends animal{}
//dog is a animal

4、java中的类和类之间的继承是单基础

类和类之间、接口和接口之间都可以有继承关系 但是类和类之间,是单继承 接口和接口之间,是多继承. 单继承指的是,一个类只能有一个[直接]的父类型,但是一个类可能会有很多个超类,超类指的是一个类的父类型的

5、父类中的属性和方法,可以被子类继承

子类调用父类的构造器有俩种情况:

1、隐式调用

如果父类中有默认的无参构造器,那么在子类中就会默认隐式的自动调用父类中的默认无参构造器

2、显示调用

如果父类中没有默认的无参构造器,那么在子类中就需要我们显式的手动调用父类中的有参构造器

6、每个类如果没有显示指定父类型,那么编译器就直接继承了Object类。

所以java中的每一个类就是直接或者间接继承了Object类,并且每一个对象和Object都有is a 的关系

public class Student extends Object{
    
    
}
package com.zzb.day19;
​
public class Student extends Person{
    
    public static void main(String[] args){
        Student stu = new Student();
        stu.name="Tom";
        System.out.println(stu.name);
        stu.run();
    }
}
package com.zzb.day19;
​
public class Person{
    
        public String name;
        public void run(){
            System.out.println("people run....");
        }
​
}

发布了82 篇原创文章 · 获赞 52 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/104905673