包java
包(package) 用于管理程序中的类,主要用于解决类的同名问题。包能够看出目录。编程
包的做用网络
[1] 防止命名冲突。dom
[2] 容许类组成一个单元(模块),便于管理和维护jvm
[3] 更好的保护类、属性和方法 ide
包命名规范工具
包命名原则:始终保持类的全路径惟一。ui
规范:this
[1]包名由小写字母组成,不能以圆点开头或结尾。圆的有特殊意义——包分隔符spa
[2]包名以前最好加上惟一的前缀,一般使用组织倒置的网络域名。如:域名javagroup.net
package net.javagroup.xx
[3]包名后续部分依不一样机构内部的规范不一样而不一样
package net.javagroup.project1.projectname.xx
导包
import 用于导包,告诉类须要的其余类在什么位置!
包名 |
描述 |
java.lang/语言包 |
系统默认导入,String类保存在这个包中,因此咱们在使用String时不须要导包 |
java.util |
工具包,一些经常使用的类库,Scanner,Date,Arrays |
java.io |
输入输出处理,文件的读写等 |
java.net |
网络编程 |
java.math |
数学计算.Math.random |
java.awt(C) |
这个包中的类用于构建和管理应用程序的图形用户界面 |
若是一个类中定义的属性和方法都是静态时,能够考虑使用静态导入。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)); } } |
思考:若是一个类中还有实例成员,能不能用静态导入?
|
为了提取两个类中公共的代码,能够使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(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(); } } |
若是Person中定义了private 属性count
|
super关键字表示父类对象,只是一个关键字,里面没有引用。
[1]super访问父类构造方法
public Dog(String name,int health,int love,String strain){ /* this.setName(name); this.setHealth(health); this.setLove(love); */ super(name,health,love); this.setStrain(strain);
} |
super调用父类构造方法时,必须写到构造方法有效代码第一句
|
[2] super调用父类的非私有属性
super能够访问父类的非私有属性。私有的属性不能用super访问。
public class Fruit{ float price; } |
public class Apple extends Fruit{
public void showInfo(){ // 不推荐使用 //System.out.println("价格:"+price); //System.out.println("价格:"+this.price); // 当须要访问父类的属性时,优先使用super System.out.println("价格:"+super.price); }
} |
变量隐藏(C)
当子类定义了一个和父类同名的属性时,在子类中优先访问子类的属性,若是要访问父类属性必定要加super。
public class Fruit{ float price;
private String color;
int weight = 100; } |
public class Apple extends Fruit{
int weight = 200;
public void showInfo(){ // 不推荐使用 //System.out.println("价格:"+price); //System.out.println("价格:"+this.price); // [1]当须要访问父类的属性时,优先使用super System.out.println("价格:"+super.price);
// [2]不能访问父类的私有属性 // System.out.println("颜色:"+super.color);
// [3] 访问和父类同名的变量weight System.out.println("重量:"+weight); System.out.println("重量:"+this.weight); System.out.println("重量:"+super.weight); }
} |
一句话:若是要访问父类属性,经过super;若是要访问子类属性,经过this.
|
java中存在4类访问修饰符,分别是private、默认、protected、public。
修饰符 |
本类✘ |
同包子类 |
同包其余类 |
不一样包子类 |
不一样包其余类 |
private |
✔ |
✘ |
✘ |
✘ |
✘ |
默认 |
✔ |
✔ |
✔ |
✘ |
✘ |
protected |
✔ |
✔ |
✔ |
✔ |
✘ |
public |
✔ |
✔ |
✔ |
✔ |
✔ |
private:私有的,只能在本类能够访问。
friendly:默认的,同包可访问,也称包访问权限。
protected:受保护的, ①子类可访问 ②同包可访问
public:公共的,均可以访问
|
继承关系内存图
|
当子类从父类继承过来的方法不能知足自身须要时,子类能够根据自身状况进行方法重写(overwrite/override)
方法重写创建在继承的基础上,没有继承,就没有重写!
子类根据自身状况,能够选择部分重写和彻底重写。
部分重写
public void showInfo(){ super.showInfo(); System.out.println("我是一只"+this.getStrain()); } |
彻底重写
重写的规则
[1]方法名称相同
[2]参数列表相同
[3]子类的访问权限必定 >= 父类访问权限
[4]返回值和父类相同或者是其子类