经过前面的学习,我们了解了this关键字以及static关键字的具体用法,以及内存分析的深入理解。接下来我们将继续java的征程。本章将学习包、import关键字以及继承的初步了解。
1.包的概念
我们发现,在java中可能存在多个名称相同的类,为了让这些类不至于混淆,java中引入了包的概念。通过包,我们很容易解决同名类的问题,也实现了类的有效管理。简单理解为相当于我们电脑里的文件夹的作用。
包名.类名将唯一标识一个类,如com.text.TT,com.hgu.TT。包名的命名方式一般是公司网址的反写。
java 中用package来声明包,范例如下:
2.jdk中的主要包
3.import关键字
通过上面的分析,java.lang包下的所有类不需要显示的导入,那么什么是导入呢?当我们使用除了java.lang包下的其他类和本类外的其他类的时候,则需要导入才能够使用。java中使用import 关键字进行类的导入。
语法:import 包名.类名【包名.*】;
4.静态导入
静态导入是jdk1.5引入的概念,其作用是用来导入指定类的静态属性,这样我们可以直接使用静态属性。
语法:import static 包名.类名.静态属性【包名.类名.*】
5.继承
我们知道,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
(3)方法的重写
我们知道,子类继承了父类的方法,但是有一个问题:当我们去用继承下来的方法时候,发现这个方法不满足我们的预期,需要修改,这个时候就要用到java中方法重写的概念,用来重写父类的方法。
方法的重写需要满足以下要点:
6.Object类的学习
通过前面的讲解,我们知道,Object类是所有java类的子类。自然的,所有java类都拥有了其方法。所以有必要了解一下Object类的方法(比较重要,如toString()、equals()等等),Object类有如下方法:
(1)toString()方法
该方法用来返回对象的字符串表示形式,如对象.toString()
但是,你会发现,这个toString()方法并不能满足我们的需要,所以我们需要重写该方法,如下所示,该方法可满足需求。
(2)equals(Object obj)方法
该方法用来判断两个对象是否相同。
注意:==和equals的区别
==,一般用来比较基本数据类型是否相同,如果用来比较引用数据类型,则是比较两个对象在堆内存中所处地址是否相等。
equals,用来判断引用数据类型和字符串是否相同,如果没有被重写过,其与==等价
请大家思考下面的代码结果,并指明是为什么?