java:包、继承,访问修饰符
包
包(package) 用于管理程序中的类,主要用于解决类的同名问题。包可以看出目录。
包的作用
[1] 防止命名冲突。
[2] 允许类组成一个单元(模块),便于管理和维护
[3] 更好的保护类、属性和方法
包命名规范
包命名原则:始终保持类的全路径唯一。
规范:
[1]包名由小写字母组成,不能以圆点开头或结尾。圆的有特殊意义——包分隔符
[2]包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。如:域名javagroup.net
package net.javagroup.xx
[3]包名后续部分依不同机构内部的规范不同而不同
package net.javagroup.project1.projectname.xx
在控台如何编译包:javac -d ./(当前文件夹) ./Tset01.java (javac -d 编译目的地 源文件)没个都有空格
编译完成后,Test01的全路径是cn.huang001.Test01
注意:编译时还没有包出来,不能用源文件的全路径形式
1.1 jvm提供的包
|
包名 |
描述 |
|
java.lang/语言包 |
系统默认导入,String类保存在这个包中,所以我们在使用String时不需要导包 |
|
java.util |
工具包,一些常用的类库,Scanner,Date,Arrays |
|
java.io |
输入输出处理,文件的读写等 |
|
java.net |
网络编程 |
|
java.math |
数学计算.Math.random |
|
java.awt(C) |
这个包中的类用于构建和管理应用程序的图形用户界面 |
为什么要使用继承?
为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class).
java继承的特性
[1] 单根性。在java中,一个类只能有一个直接父类。
[2] 传递性。C继承于B,B继承于A,C具有A的特性和行为。
类B继承于类A,使用关键字extends,B拥有了A中非私有的属性和方法。
变量隐藏(C)
当子类定义了一个和父类同名的属性时,在子类中优先访问子类的属性,如果要访问父类属性一定要加super。
//如果引入两个相同名字的类时,其中一个可以用import,另一个如下
//其中一个在创建对象时写全路径
//java.util.Date date1 = new java.util.Date()
//用于定义包的位置 package 包名.包名
package cn.car;
//必须写到源代码的第一句
import cn.car.*; //导入cn.car下的所有类
//import 用于导包,告诉类需要的其他类在什么位置!
//(在同一包不需要导入)
public class Test01{
public static void main(String[] args){
Carriage ca=new Carriage("","汽车","武大郎");
ca.carriage();
Taxi caa=new Taxi("","京B123","景顺出租车公司");
caa.taxi(); }
}
//java继承父类(公共类)是多个类的共有的属性和方法
//单根性。在java中,一个类只能有一个直接父类。
//传递性。C继承于B,B继承于A,C具有A的特性和行为。 //父类
package cn.car; public class Car{
private String motorcyle;
private String number; public void setMotorcyle(String motorcyle){
this.motorcyle=motorcyle;
}
public String getMotorycle(){
return this.motorcyle;
}
public void setNumber(String number){
this.number=number;
}
public String getNumber(){
return this.number;
}
public Car(){ }
public Car(String motorcyle,String number){
this.setMotorcyle(motorcyle);
this.setNumber(number);
}
}
//java继承子类
//类B继承于类A,使用关键字extends,B拥有了A中非私有的属性和方法。
//导入cn.car下的Carriage类
//先导入父类在继承父类(同一包不需要导入)
//子类不能继承private成员,不能继承构造方法,父类子类不在同包不能使用默认访问 //子类
package cn.car;
import cn.car.Car;
public class Carriage extends Car{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
} public Carriage(){//无参构造 }//有参构造
public Carriage(String motorcyle,String number,String name){
super(motorcyle,number);
this.setName(name);
}
public void carriage(){
System.out.println("我是"+this.name+",我的"+super.getNumber()+"我做主");
System.out.println("目的地到了,我们去玩吧");
}
}
//java继承子类
//类B继承于类A,使用关键字extends,B拥有了A中非私有的属性和方法。
package cn.car;
import cn.car.Car;
public class Taxi extends Car{
private String company; public void setCompany(String company){
this.company=company;
}
public String getCompany(){
return this.company;
} public Taxi(){ }
public Taxi(String motorcyle,String number,String company){
//super关键字表示父类对象,只是一个关键字,里面没有引用
//super调用父类构造方法时,必须写到构造方法有效代码第一句
super(motorcyle,number);
//super可以访问父类的非私有属性。私有的属性不能用super访问。
this.setCompany(company);
} public void taxi(){
System.out.println("乘客您好");//// 当需要访问父类的属性时,优先使用super
System.out.println("我是"+company+"的,我的车牌是"+super.getNumber()+",您要去哪里?");
System.out.println("目的地已经到了,请您付费下车,欢迎再次乘坐");
}//super.父类方法名(); 可以把父类的方法继承过来 }/*如果要访问父类属性,通过super;如果要访问子类属性,通过this. 当子类定义了一个和父类同名的属性时,
在子类中优先访问子类的属性,如果要访问父类属性一定要加super。*/

静态导入
如果一个类中定义的属性和方法都是静态时,可以考虑使用静态导入。jdk1.5+ 出现。
如果子类 父类 全是静态变量或方法 就可以静态导入,静态导入后可以直接提取类中的变量和方法
import static cn.sxt01.Calc.*;
1.1 访问修饰符
java中存在4类访问修饰符,分别是private、默认、protected、public。
|
修饰符 |
本类✘ |
同包子类 |
同包其他类 |
不同包子类 |
不同包其他类 |
|
private |
✔ |
✘ |
✘ |
✘ |
✘ |
|
默认 |
✔ |
✔ |
✔ |
✘ |
✘ |
|
protected |
✔ |
✔ |
✔ |
✔ |
✘ |
|
public |
✔ |
✔ |
✔ |
✔ |
✔ |
private:私有的,只能在本类可以访问。
friendly:默认的,同包可访问,也称包访问权限。
protected:受保护的, ①子类可访问 ②同包可访问
public:公共的,都可以访问
继承关系的初始化顺序
继承关系内存图


java:包、继承,访问修饰符的更多相关文章
- 分享知识-快乐自己:java 中的访问修饰符
1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...
- Java基础——protected访问修饰符探讨
Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的子孙类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: packa ...
- java的访问控制(包、访问修饰符、修饰符)
一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...
- JAVA中的访问修饰符和包
一.JAVA访问修饰符 访问修饰符,用来控制类中成员的可见性 有四个访问修饰符,分别是:default,private,public,protected 1.default(默认):默认权限,不用写的 ...
- java中的访问修饰符
Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.其中package代表缺省的访问权限,具体到代码中就是不写任何修饰符的 ...
- [转]java构造方法的访问修饰符
http://my.oschina.net/u/1464678/blog/210359 1. 类(class) 可见性修饰符: public—在所有类中可见,在其他包中可以用import导 ...
- java类的访问修饰符
1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...
- java中的访问修饰符详解
主要讲述一下java中protected的修饰控制范围. 在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类.开发类.定义类的过程.类里面可 ...
- Java——类的访问修饰符
1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...
- 1.7Oob封装 继承 访问修饰符 静态和构造方法的执行顺序
1:访问修饰符 private 同类中 默认 同类 同包 protect 同类 同包 子类 public 同类 ...
随机推荐
- redis 连接idea一直被拒绝
网上查找的方法 方法一:idea中已经下载了Iedis 插件, 也导入了jar包 <!-- https://mvnrepository.com/artifact/commons-pool/com ...
- js判断iPhone XS、iPhone XS Max、iPhone XR
// iPhone X.iPhone XS && window.screen.width === && window.screen.height === ; // iP ...
- BZOJ2300[HAOI2011]防线修建——非旋转treap+凸包(平衡树动态维护凸包)
题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...
- magento 由于Httpd进程增多,导致CPU占用100%问题
由于Httpd进程增多,导致CPU占用100%问题 magento for version 2.2.3 前些天一直导致CPU无法控制的增多问题. 根据报错我设置了如下内容: [Mysql]mysql. ...
- CSS3常用的循环动画
定义动画 @keyframes rotatefresh { from { transform: rotate(0deg) } to { transform: rotate(360deg); trans ...
- bzoj3168 钙铁锌硒维生素 (矩阵求逆+二分图最小字典序匹配)
设第一套为A,第二套为B 先对于每个B[i]判断他能否替代A[j],即B[i]与其他的A线性无关 设$B[i]=\sum\limits_{k}{c[k]*A[k]}$,那么只要看c[j]是否等于零即可 ...
- postgresql某个字段值按照指定规则排序
select id,serial_group_id,state from ap_model order by serial_group_id asc, ( case when state=1 then ...
- uboot2012(一)分析重定位
目录 引入 环境配置 编译体验 入口查找 代码分析 board_init_f pie 内存分布分析 SP设置 board_init_f 重定位 代码段重定位实现 变量地址修改 参考 title: ub ...
- 编写高质量的Python代码系列(五)之并发与并行
用Python可以很容易就能写出并发程序,这种程序可以在同一时间做许多间不同的事情.我们也可以通过系统调用.子进程(subprocess)及C语言扩展来实现并行处理. 第三十六条: 用subproce ...
- 基于jeesite的cms系统(五):wangEditor富文本编辑器
一.关于wangEditor: wangEditor —— 轻量级 web 富文本编辑器,配置方便,使用简单.支持 IE10+ 浏览器. 官网:www.wangEditor.com 文档:www.ka ...