JAVA进阶(三)包、继承及Object类

前言

       经过前面的学习,我们了解了this关键字以及static关键字的具体用法,以及内存分析的深入理解。接下来我们将继续java的征程。本章将学习包、import关键字以及继承的初步了解。

范例

1.包的概念

我们发现,在java中可能存在多个名称相同的类,为了让这些类不至于混淆,java中引入了包的概念。通过包,我们很容易解决同名类的问题,也实现了类的有效管理。简单理解为相当于我们电脑里的文件夹的作用。

包名.类名将唯一标识一个类,如com.text.TT,com.hgu.TT。包名的命名方式一般是公司网址的反写。

java 中用package来声明包,范例如下:

JAVA进阶(三)包、继承及Object类_第1张图片

2.jdk中的主要包

  •  java.lang:包含了Java语言的核心类,如String/Math/System/Thread等,使用该包下面的类是不需要显式的导入的
  •  java.util:包含了大量的工具类,如集合框架的,日期处理等;
  •  java.net:关于Java网络编程的一些类和接口;
  •  java.io:关于Java输入输出编程的相关类和接口;
  •  java.text:Java格式化相关的类;
  •  java.sql:定义了Java进行JDBC数据库编程的相关类和接口;
  •  java.awt:定义了图形用户界面设计相关的类和接口;

3.import关键字

通过上面的分析,java.lang包下的所有类不需要显示的导入,那么什么是导入呢?当我们使用除了java.lang包下的其他类和本类外的其他类的时候,则需要导入才能够使用。java中使用import 关键字进行类的导入。

语法:import 包名.类名【包名.*】;

JAVA进阶(三)包、继承及Object类_第2张图片

 4.静态导入

静态导入是jdk1.5引入的概念,其作用是用来导入指定类的静态属性,这样我们可以直接使用静态属性。

语法:import static 包名.类名.静态属性【包名.类名.*】

JAVA进阶(三)包、继承及Object类_第3张图片

 5.继承

我们知道,java面向对象的三大特征是继承、封装、多态。此外还包含抽象类、接口以及内部类的相关概念。

接下来我们聊一聊继承的概念。所谓继承,简单的说那就是宇宙、银河、地球的关系。

注意:

  • 父类也成为超类、基类、派生类
  • java中只有单继承,没有C++那样的多继承,多继承会引起混乱,使得继承过于复杂,系统难以维护
  • 虽然java中类没有多继承,但是接口有多继承
  • 子类继承父类,可以得到父类的全部属性和方法(构造方法除外),但不见得可以访问(比如父类的私有属性和方法)
  • 如果定义一个类没有使用extends关键字,那么它默认继承了java.lang.Object类,他是所有java类的父类

java中使用 extends关键字来表示类与类之间的继承关系。下面就是学生类继承了人的类:

package com.jwang.test;

import java.util.Date;

class Student extends Person{
	String sid;//学号
	void homeWork(){
		System.out.println("做作业!");
	}
}
public class Person {
	String name;//姓名
	String sex;//性别
	int age;//年龄
	Date hireDate;//生日
	
	void sport(){
		System.out.println("散散步!");
	}
	public static void main(String[] args) {
		Person person = new Person();
		person.sport();
		Student student = new Student();
		student.sport();
	}
}

(1)super关键字

继承Person类的Student类。构造方法没有被继承下来,在子类中调用父类的构造方法,java中使用super关键字可以调用父类的方法等,这其中就包含了不能被继承下来的构造方法,使用方式和this关键字差不多。子类构造器默认调用父类空构造器

package com.jwang.test;

import java.util.Date;

class Student extends Person{
	String sid;//学号
	Student(String name, String sex, int age, Date hireDate,String sid) {
		super(name, sex, age, hireDate);//super调用父类构造方法
		this.sid = sid;
	}
}
public class Person {
	String name;//姓名
	String sex;//性别
	int age;//年龄
	Date hireDate;//生日
	
	Person(String name, String sex, int age, Date hireDate) {
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.hireDate = hireDate;
	}
	public static void main(String[] args) {
		
	}
}

探究下面程序的运行结果:

package com.jwang.test;

public class Welcome {
	public static void main(String[] args) {
		Tool tool = new Car();
	}
}


class Tool{
	String name;
	//1
	static{
		System.out.println("Tool类静态初始化块");
	}
	//3
	{
		System.out.println("Tool类普通语句块");
	}
	//4
	public Tool() {
		System.out.println("Tool类构造方法");
	}
}

class Car extends Tool{
	int age;
	//2
	static{
		System.out.println("Car类静态初始化块");
	}
	//5
	{
		System.out.println("Car类普通语句块");
	}
	//6
	public Car() {
		System.out.println("Car类构造方法");
	}
}

(2)instansOf运算符

java中判断一个对象是否是某一个类的对象的时候,使用 instansOf关键字进行判断。

语法:对象 instansOf 类

如果是这个类的对象,那么将返回true,否则返回false

JAVA进阶(三)包、继承及Object类_第4张图片

(3)方法的重写

我们知道,子类继承了父类的方法,但是有一个问题:当我们去用继承下来的方法时候,发现这个方法不满足我们的预期,需要修改,这个时候就要用到java中方法重写的概念,用来重写父类的方法。

方法的重写需要满足以下要点:

  • 方法名、形参列表相同
  • 返回值类型和声明异常的类型,子类小于等于父类
  • 访问权限,子类大于等于父类

JAVA进阶(三)包、继承及Object类_第5张图片

6.Object类的学习

通过前面的讲解,我们知道,Object类是所有java类的子类。自然的,所有java类都拥有了其方法。所以有必要了解一下Object类的方法(比较重要,如toString()、equals()等等),Object类有如下方法:

JAVA进阶(三)包、继承及Object类_第6张图片

(1)toString()方法

该方法用来返回对象的字符串表示形式,如对象.toString()

JAVA进阶(三)包、继承及Object类_第7张图片

但是,你会发现,这个toString()方法并不能满足我们的需要,所以我们需要重写该方法,如下所示,该方法可满足需求。

JAVA进阶(三)包、继承及Object类_第8张图片

(2)equals(Object obj)方法

该方法用来判断两个对象是否相同。

注意:==和equals的区别

==,一般用来比较基本数据类型是否相同,如果用来比较引用数据类型,则是比较两个对象在堆内存中所处地址是否相等。

equals,用来判断引用数据类型和字符串是否相同,如果没有被重写过,其与==等价

请大家思考下面的代码结果,并指明是为什么?

JAVA进阶(三)包、继承及Object类_第9张图片

你可能感兴趣的:(Java)