包(package)以及面向对象三个基本特征(继承)的介绍
1.包(package)
包(package) 用于管理程序中的类,主要用于解决类的同名问题。包也可以看成一个目录。
包的作用
[1] 防止命名冲突。
[2] 允许类组成一个单元(模块),便于管理和维护。
[3] 更好的保护类、属性和方法 。
1.1 如何定义包
使用package进行定义,应放在源文件有效代码的第一句。// package 路径
包的命名原则:始终保持类的全路径唯一。
规范:
(1)包名由小写字母组成,不能以圆点开头或结尾。(圆点为包的分隔符)。
(2)包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如:package net.javagroup.xx
(3)包名后续部分依不同机构内部的规范不同而不同如:package net.javagroup.project1.projectname.xx
package test.newtest;
public class test{
public static void main (string[] args){
system.out.println("hellow");
}
}
当编译带包的源文件时写法是:javac -d 目的地 源文件
编译完成后test字节码文件的路径是 test.newtest.test 。
1.2 如何导入包
使用import进行导入操作,告知该类需要的其他类在哪个路径。
使用方法:(1)import test.newtest.test // 导入test.newtest目录下的test类。
(2)import test.newtest.*// 导入test.newtest目录下的所有类。
1.3 jvm提供的一些包
1.4 静态导入
在jdk1.5以后,可以导入类中的静态变量和方法。
使用方法:import static 路径.路径下的类名*; 例如:import static cn.sxt01.calc.*;
2.继承
为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class)。
2.1 访问修饰符
java中存在4类访问修饰符,分别是private、默认、protected、public。
(1)private:私有的,只能在本类可以访问。
(2)friendly:默认的,同包可访问,也称包访问权限。
(3)protected:受保护的, ,类可访问 ,同包可访问 。
(4)public:公共的,都可以访问。
2.2 java 继承的特性
(1) 单根性。在java中,一个类只能有一个直接父类。
(2)传递性。c继承于b,b继承于a,c具有a的特性和行为。
类b继承于类a,使用关键字extends,b拥有了a中非私有的属性和方法。其中不能被继承的父类成员有:
(1)父类中的private成员;
(2)子类与父类不在同一个包,使用了默认访问权限的成员;
(3)父类中的构造方法。
public class person{
string name;
int age;
public void showinfo(){
system.out.println("姓名:"+name);
system.out.println(",年龄:"+age);
}
} //父类
public class student extends person{
} //子类,使用关键字extends进行定义
public class test01{
public static void main(string[] args){
student s = new student();
s.name = "张三";
s.age = 20;
s.showinfo();
}
}//当需要使用多个类时,可以使用继承,提取多个类*有的部分,从而达到简化代码的效果。
2.3 super关键字
super关键字表示父类对象,只是一个关键字,无引用的效果。
super的作用:
(1)super访问父类构造方法
public dog(string name,int health,int love,string strain){
super(name,health,love);
this.setstrain(strain);
}
(2)super调用父类的非私有属性(注意:私有的属性不能用super访问。)
public class fruit{
float price;
}
public class apple extends fruit{
public void showinfo(){
system.out.println("价格:"+super.price);
}
}
(3)super调用父类的非私有方法
public void print(){
super.showinfo();
system.out.println(",我是一只"+this.getstrain());
}
(*当子类中没有与父类同名的属性时,直接使用属性名或this.属性名也可以访问父类的非私有属性,但是访问速度相较于super.属性名会比较慢,不推荐使用)
2.4 方法的重写(overwrite/override)
当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况选择部分重写或者完全重写。
方法重写建立在继承的基础上,没有继承,就没有重写!
(1)部分重写
public void showinfo(){
super.showinfo();
system.out.println("我是一只"+this.getstrain()); //在从父类继承过来的方法的基础上添加新的需要。
}
(2)完全重写
public void showinfo(){
system.out.println("--"+super.getname()+"--");
system.out.println("健康值:"+super.gethealth());
system.out.println("亲密度:"+super.getlove());
system.out.println("品种:"+this.getstrain()); //对父类的方法进行完全重写
}
重写的规则
[1]方法名称相同。
[2]参数列表相同。
[3]子类的访问权限一定 >= 父类访问权限。
[4]返回值和父类相同或者是其子类。