zoukankan      html  css  js  c++  java
  • 包_继承

    包_继承

    1.包

    包(package) 用于管理程序中的类,主要用于解决类的同名问题。包可以看成目录。

    包的作用:

    【1】防止命名冲突

    【2】允许类组成一个单元模块,便于管理

    【3】更好的保护类、属性和方法

    1.1定义包

    package用于定义包,形如:package   路径(包名)

    必须写到源文件的有效代码的第一句。

    1 package cm.wuhao;     //定义包
    2 
    3 public class Test01{
    4     public static void main(String[] args){
    5         System.out.println("test package");
    6     }
    7 }

    编译带包的源文件

    javac -d 目的地 源文件

    编译完成后生成的字节码的全路径

    运行编译好的字节码文件

    java 包路径+类名

    例如:

     1.2包的命名规范

    原则:始终保持类的全路径是唯一

    规范:

    [1]包名由小写字母组成,不能以圆点开头或结尾。圆点有特殊意义——包分隔符

    [2]包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如javagroup.com.xx   avagroup.net.xx

    [3]包名后续部分依不同机构内部的规范不同而不同

    1.3导包

    import 用于导包,告诉类需要的其他类在什么位置(路径)。

    形如:

    1 import com.wuhao.Student; // 导入com.wuhao下的Student类。 

    2 import com.wuhao.*; // 导入com.wuhao下的所有类。

    编译时要先编译导入的包,其他类生成该类的全路径方能编译本类成功。

    1.4不同包中的同名

    如果一个类中用到了两个不同包但同名的类时,如何处理?

    1 import java.util.Date; //两个包中都有date类
    2 import java.sql.Date;
    3 
    4 public class Test05{
    5     public static void main(String[] args) { 
    6     Date date = new Date(0);
    7 }
    8 
    9 }

    这时候系统报错,并没有通过编译

    我们可以这样处理:

    创建对象时写其中一个对象的全路径

     1 import java.sql.Date;//sql中的Date类
     2 
     3 public class Test05{
     4     public static void main(String[] args) { 
     5     java.util.Date date1 = new java.util.Date();//写全路径
     6     System.out.println("date1的地址"+date1);
     7     Date date2 = new Date(0); //调用sql中的Date类
     8     System.out.println("date2的地址"+date2);
     9 }
    10 
    11 }

    2.jvm中提供的包

    包名

    描述

    java.lang/语言包

    系统默认导入,String类保存在这个包中,所以我们在使用String时不需要导包

    java.util

    工具包,一些常用的类库,Scanner,Date,Arrays

    java.io

    输入输出处理,文件的读写等

    java.net

    网络编程

    java.math

    数学计算.Math.random

    java.awt(C)

    这个包中的类用于构建和管理应用程序的图形用户界面

    3.静态导入

    如果一个类中定义的属性和方法都是静态时,可以考虑使用静态导入。jdk1.5+ 出现。

    1 package cn.sxt01;
    2 public class Calc{
    3     public static float PI = 3.14f; //静态属性
    4     
    5     public static int add(int a,int b){
    6         return a+b;
    7     }
    8 }
    1 package cn.sxt02;
    2 // 静态导入
    3 import static cn.sxt01.Calc.*;
    4 public class Test01{
    5     public static void main(String[] args){
    6         System.out.println(PI);
    7         System.out.println(add(1,2));
    8     }
    9 }

    思考:如果一个类中还有实例成员,能不能用静态导入?

    4.继承

    4.1为什么要继承?

    为了提取较少代码的重复性,把抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class).

    java 的继承特性:

    【1】单根性:只能有一个父类(只有一个爸爸)

    【2】传递性:可以是爸爸从爷爷那继承过来的非私有的属性和方法,儿子在从爸爸那里继承下来(类似中国的香火延续)

    类B继承于类A,使用关键字extends,则B拥有了A中非私有的属性和方法。

    1 class Car {                   //父类
    2     private int site;  //座位数
    3     public void setSite(int site){
    4         this.site = site;
    5     }
    6     void print(){
    7         System.out.print("载客量是"+site+"人");
    8     }
    9 }
    1 class Bus extends Car {           //子类
    2     Bus(int site){
    3         setSite(site);
    4     }
    5 }
    1 public class Test04{
    2     public static void main(String[] args) {   
    3     Bus bus = new Bus(20);    
    4     bus.print();
    5 }
    6 
    7 }    

    如果Person中定义了private 属性count

    5.super关键字

    super只是一个关键字,区别于this关键字,super并没有引用有地址。

    super的作用:

    【1】访问父类的构造方法

     1 public Dog(String name,int health,int love,String strain){
     2         /*
     3         this.setName(name);
     4         this.setHealth(health);
     5         this.setLove(love);
     6         */
     7         super(name,health,love);
     8         this.setStrain(strain);
     9         
    10     }

    super调用父类构造方法时,必须写到构造方法有效代码第一句

    【2】super调用父类的非私有属性

    super可以访问父类的非私有属性。私有的属性不能用super访问。

    变量隐藏(C)

    当子类定义了一个和父类同名的属性时,在子类中优先访问子类的属性,如果要访问父类属性一定要加super。

    一句话:如果要访问父类属性,通过super;如果要访问子类属性,通过this.

    [3] super访问非私有父类方法

    1 public void print(){
    2         System.out.print("我的姓名"+super.getName());
    3         System.out.print(",健康值"+super.getHealth());
    4                 System.out.print(",亲密度"+super.getLove());
    5         super.showInfo();
    6         System.out.println(",我是一只"+this.getStrain());
    7     }
    8                         

    6.子类不能继承父类的资源

    7.访问修饰符

    java中存在4类访问修饰符,分别是private、默认、protected、public。

    修饰符

    本类✘

    同包子类

    同包其他类

    不同包子类

    不同包其他类

    private

    默认

    protected

    public

    private :只能访问本类成员

    friendly:默认的,同包可以访问,包访问符

    protected:除了不同包的其它类不能访问,其它都可以访问

    public:全都可以访问

    8.继承的循序

    继承关系内存图

    9.方法的重写

    当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况进行方法重写(overwrite/override)

    方法重写建立在继承的基础上,没有继承,就没有重写!

    子类根据自身情况,可以选择部分重写和完全重写。

     部分重写

    1 public void showInfo(){
    2         super.showInfo();
    3         System.out.println("我是一只"+this.getStrain());
    4     }

    完全重写

    1 public void showInfo(){
    2         System.out.println("--"+super.getName()+"--");
    3         System.out.println("健康值:"+super.getHealth());
    4         System.out.println("亲密度:"+super.getLove());
    5         System.out.println("品种:"+this.getStrain());
    6     }

    重写的规则

    [1]方法名称相同

    [2]参数列表相同

    [3]子类的访问权限一定 >= 父类访问权限 private 特殊除外

    [4]返回值和父类相同或者是其子类

    1 public Pet create(){
    2         Pet pet = new Pet();
    3         return pet;
    4 }
    1 public Dog create(){
    2         Dog dog = new Dog();
    3         return dog;
    4 }
  • 相关阅读:
    3D 立体动态图 代码:
    自由切换 网页上的 ico 图标
    ES6 基本语法:
    JavaScript中class类的介绍
    React_01_ECMAScript6
    使用JS计算前一天和后一天
    Web 前端学习计划
    read
    java对象实例化
    关于为什么java需要垃圾回收
  • 原文地址:https://www.cnblogs.com/ruckly/p/10753612.html
Copyright © 2011-2022 走看看