1 包_继承
1.1 包
包(package) 用于管理程序中的类,主要用于解决类的同名问题。包可以看出目录。
包的作用
[1] 防止命名冲突。
[2] 允许类组成一个单元(模块),便于管理和维护
[3] 更好的保护类、属性和方法
用于定义包,必须写到源文件的有效代码的第一句。
编译带包的源文件
javac –d 目的地 源文件
编译完成后,Test01的全路径是cn.sxt.Test01
1.1.1 包命名规范
包命名原则:始终保持类的全路径唯一。
规范:
[1]包名由小写字母组成,不能以圆点开头或结尾。圆的有特殊意义——包分隔符
[2]包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如:域名javagroup.net
package net.javagroup.xx
[3]包名后续部分依不同机构内部的规范不同而不同
package net.javagroup.project1.projectname.xx
1.1.1 导包
import 用于导包,告诉类需要的其他类在什么位置!
形式:
import cn.sxt02.Student // 导入cn.sxt02下的Student类。
import cn.sxt02.* // 导入cn.sxt02下的所有类。
1.1.1 不同包中的同名类
如果一个类中用到了两个不同包但同名的类时,如何处理?
在创建对象时写全路径
例如:
import java.util.Date;
import java.sql.Date;
java.util.Date date1 = new java.util.Date();
System.out.println(date1);
java.sql.Date date2= new java.sql.Date();
Sysrem.out.println(date2);
Date date2 = new Date(0);
System.out.println(date2);
1.1 静态导入
如果一个类中定义的属性和方法都是静态时,可以考虑使用静态导入。jdk1.5+ 出现。
package cn.sxt01;
public class Calc{
public static float PI = 3.14f;
public static int add(int a,int b){
return a+b;
}
}
package cn.sxt02;
// import cn.sxt01.Calc;
// 静态导入
import static cn.sxt01.Calc.*;
public class Test01{
public static void main(String[] args){
System.out.println(PI);
System.out.println(add(1,2));
}
}
1.1 继承
1.1.1 为什么要使用继承?
为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class).
java继承的特性
[1] 单根性。在java中,一个类只能有一个直接父类。
[2] 传递性。C继承于B,B继承于A,C具有A的特性和行为。
类B继承于类A,使用关键字extends,B拥有了A中非私有的属性和方法。
public class Person{ String name; int age;
public void showInfo(){ System.out.println("姓名:"+name); System.out.println(",年龄:"+age); } } |
public class Student extends Person{
} |
public class Test01{ public static void main(String[] args){ Student s = new Student(); s.name = "张三"; s.age = 20; s.showInfo(); } } |
1.1 Super
super关键字表示父类对象,只是一个关键字,里面没有引用。
[1]super访问父类构造方法
super调用父类构造方法时,必须写到构造方法有效代码第一句
super调用父类的非私有属性
super可以访问父类的非私有属性。私有的属性不能用super访问。
变量隐藏(C)
当子类定义了一个和父类同名的属性时,在子类中优先访问子类的属性,如果要访问父类属性一定要加super。
一句话:如果要访问父类属性,通过super;如果要访问子类属性,通过this.
[3] super访问非私有父类方法
super.showInfo();
不能被子类继承的
1.1 访问修饰符
java中存在4类访问修饰符,分别是private、默认、protected、public。
private:私有的,只能在本类可以访问。
friendly:默认的,同包可访问,也称包访问权限。
protected:受保护的, ①子类可访问 ②同包可访问
public:公共的,都可以访问
1.1 继承关系的初始化顺序
1.1 方法的重写
当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况进行方法重写(overwrite/override)
方法重写建立在继承的基础上,没有继承,就没有重写!
子类根据自身情况,可以选择部分重写和完全重写。
重写的规则
[1]方法名称相同
[2]参数列表相同
[3]子类的访问权限一定 >= 父类访问权限
[4]返回值和父类相同或者是其子类
public Pet create(){
Pet pet = new Pet();
return pet;
}
public Dog create(){
Dog dog = new Dog();
return dog;
}