Java学习笔记-基础语法Ⅲ
继承:子类使用extends来继承父类,子类可以有父类的内容,还可以有子类自己特有的内容
继承的好处:
提高了代码的复用性(多个类相同的成员可以放到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承的弊端:
- 继承让类的耦合性增强了,父类发生变化时,子类页发生变化,削弱子类的独立性
继承中变量访问特点:
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 都没有就报错
// 父类
public class Fu {
public int age = 30;
}
// 子类
public class Zi extends Fu{
public String name = "kkk";
public int age = 40;
public void show(){
// age = 50;
System.out.println(name+age);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
super关键字的用法和this关键字的用法相似:
- this代表本类对象的引用
- super代表父类存储空间的标识,可以理解为父类对象引用

父类构造方法不会被继承,构造方法是用来初始化对象的
构造方法前面是不能加void之类的返回值,加了就不是构造方法,系统会识别成普通方法
子类所有构造方法都会默认访问父类中无参的构造方法
子类会继承父类中的数据,还可能使用父类的数据,所有子类初始化之前会完成父类的初始化,每个子类构造方法的第一条语句默认都是super()
// 父类
public class Fu {
// 注意,这里的无参构造方法如果不写,那么子类不能直接super(),或者无法直接继承父类的无参构造方法
public Fu(){
System.out.println("父中无参构造方法被调用");
}
public Fu(int age){
System.out.println("父中带参构造方法被调用");
}
}
// 子类
public class Zi extends Fu{
public Zi(){
// super();
// 要么调用父类无参构造方法,要么调用父类带参构造方法
// 只能调用其中一个,多了会报错
super(30);
System.out.println("子中无参构造方法被调用");
}
public Zi(int age){
System.out.println("子中带参构造方法被调用");
}
}
// 测试类
public class Super_Demo {
public static void main(String[] args) {
Zi z1 = new Zi();
Zi z2 = new Zi(30);
}
}
// 结果
父中带参构造方法被调用
子中无参构造方法被调用
父中无参构造方法被调用
子中带参构造方法被调用
方法重写:子类中出现了和父类中一模一样的方法声明
@Override可以帮助检查方法重写
Java有四种访问权限
| 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | |
|---|---|---|---|---|
| Private | √ | |||
| √ | √ | |||
| Protected | √ | √ | √ | |
| Public | √ | √ | √ | √ |
方法重写的时候要注意,私有方法不能被重写,且子类方法访问权限不能更低,public>protected>默认>private
Java支持多层继承,但不支持多继承
包,其实就是文件夹,作用是对类进行分类管理,格式为
- package 包名;
- package 一级包.二级包;
要弄清楚四种访问权限的话,需要耐心把代码敲一遍
// 注意这里的包,demo1下有Fu、Zi、Demo三个Java文件
package demo1;
public class Fu {
private void show1(){
System.out.println("private 方法可以被调用");
}
void show2(){
System.out.println("默认的方法可以被调用");
}
protected void show3(){
System.out.println("protected 方法可以被调用");
}
public void show4(){
System.out.println("public 方法可以被调用");
}
public static void main(String[] args) {
Fu d1 = new Fu();
d1.show1();
d1.show2();
d1.show3();
d1.show4();
}
}
// 这里的意思是同一个类下,四种访问权限的方法都可以访问
// 还是demo1的包,Zi继承Fu,现在不能调用private修饰的方法了
package demo1;
public class Zi extends Fu{
public static void main(String[] args) {
Fu f = new Fu();
f.show2();
f.show3();
f.show4();
}
}
package demo1;
public class Demo {
public static void main(String[] args) {
Fu f = new Fu();
f.show4();
f.show3();
f.show2();
}
}
// 这里表示,只要是同一个包下,继承不继承,都是可以调用除private权限外的3种访问权限
现在到别的包下,看看访问权限
package demo2;
import demo1.Fu;
public class Zi extends Fu {
public static void main(String[] args) {
Zi z = new Zi();
z.show3();
z.show4();
Fu f = new Fu();
f.show4();
}
}
// 其他包下,继承关系,只能调用public和protected
// 没有关系的对象,只能调用public
package demo2;
import demo1.Fu;
public class Demo {
public static void main(String[] args) {
Fu f = new Fu();
f.show4();
}
}
这上面是黑马视频讲的内容,但是可能读者还有疑问,如果是不同包下,进行多层继承呢?也就是如果demo2下的包继承demo1中的Zi,又是什么情况呢?
package demo2;
import demo1.Zi;
public class zz extends Zi {
public static void main(String[] args) {
zz zz2 = new zz();
zz2.show3();
zz2.show4();
}
}
// 结果还是只有protected和public两种权限
修饰符final
final可以修饰成员方法,成员变量,类
final修饰的特点,对方法则不能被重写,对变量则不能被再次赋值,对类则不能被继承
对于变量,final修饰基本类型时数据值不能改变,修饰引用类型的地址值不能改变,但是地址里面的值可以改变
// java类
public class Student {
public int age;
public String name;
public void show(){
System.out.println(age+name);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
final int age = 20;
// final修饰基本数据类型,其值不能改变
// age = 30;
System.out.println(age);
final Student s = new Student();
s.age = 40;
s.show();
s.age = 50;
s.show();
}
}
static修饰符修饰成员方法、成员变量
static修饰的对象共享
// 学生类
public class Student {
public int age;
public String name;
public static String school;
public void show(){
System.out.println(name+", "+age+", "+school);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
Student s1 = new Student();
// Student.school = "浙江大学";
s1.age = 18;
s1.name = "林青霞";
s1.school = "浙江大学";
s1.show();
Student s2 = new Student();
s2.age = 28;
s2.name = "张曼玉";
s2.show();
s2.school = "华科";
s2.show();
s1.show();
}
}
林青霞, 18, 浙江大学
张曼玉, 28, 浙江大学
张曼玉, 28, 华科
林青霞, 18, 华科
static修饰的变量,推荐使用类名调用,也可以使用对象名调用
静态的只能调用静态的,非静态的都可以进行调用
public class Demo {
public String name;
public static String age;
// 非静态
public void show1(){}
// 静态
public static void show2(){}
// 非静态的都能调用
public void show3(){
System.out.println(name);
System.out.println(age);
show1();
show2();
}
// 静态的只能调用静态的
public static void show4(){
System.out.println(name);
System.out.println(age);
show1();
show2();
}
public static void main(String[] args) {
Demo de = new Demo();
de.show3();
de.show4();
}
}
Java学习笔记-基础语法Ⅲ的更多相关文章
- Java学习笔记-基础语法Ⅳ
多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...
- Java学习笔记-基础语法
Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...
- Java学习笔记-基础语法Ⅹ-进程线程
学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...
- Java学习笔记-基础语法Ⅷ-泛型、Map
泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...
- Java学习笔记-基础语法Ⅴ
学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...
- JAVA 学习笔记 - 基础语法 2
---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null; //在堆栈中申明变量名称 数组名称 = new 数据类型[10]; // ...
- JAVA 学习笔记 - 基础语法1
1. 类的定义 public class 与 class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...
- Java学习笔记-基础语法ⅩⅠ-UDP、TCP
网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...
- Java学习笔记-基础语法Ⅸ-文件
File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...
- Java学习笔记-基础语法Ⅶ-集合
集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...
随机推荐
- Idea学习之"重启或清理IEDA缓存"
idea的重启 如下图所示:第1步:通过File–>Invalidate Caches进入重启窗口: 第2步:选择自己所需要的重启方式,四个按钮,一共三种重启方式: 四个按钮的说明 Invali ...
- 4-Pandas数据预处理之数据转换(df.map()、df.replace())
在数据分析中,根据需求,有时候需要将一些数据进行转换,而在Pandas中,实现数据转换的常用方法有: 利用函数或是映射 可以将自己定义的或者是其他包提供的函数用在Pandas对象上实现批量修改. ap ...
- C++ | 动多态 | 虚函数表
多态机制 C++语言有三大特性:封装.继承.多态. 其中所谓的多态,即 "同一接口,不同形态".接口在我们 C/C++ 语言中可以理解为函数名,不同形态可以理解为函数执行的功能不同 ...
- Numpy对数组按索引查询
Numpy对数组按索引查询 三种索引方法: 基础索引 神奇索引 布尔索引 基础索引 一维数组 和Python的List一样 二维数组 注意:切片的修改会修改原来的数组 原因:Numpy经常要处理大数组 ...
- 【二次元的CSS】—— 纯CSS3做的能换挡的电扇
这次分享的电扇,和以往用css3画人物相比 多加了一点交互,就是电扇开关的地方,用到了一点点css3的 :checked +div 这个很少用到的选择器来实现的. GitHub传送门:https:// ...
- sqlite的Query方法操作和参数详解
query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数: SQLiteDatabase db = databaseHelper.getWritableDatabas ...
- centos报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/
检查是否可以上网. ping 114.114.114.114 如果不可以,调试通.通了之后下一步: 然后检查DNS设置是否正常. ping www.baidu.com 不正常的话,设置DNS,如下: ...
- msmpeng.exe阻止移动硬盘弹出
MsMpEng.exe 占用 该进程是微软反恶意软件服务的一个可执行文件,用户无法手动停止该进程. 首先运行 eventvwr.msc打开事件查看器,找到警告信息,查看是什么进程在阻止硬盘弹出. ...
- XUtils 开发框架
xUtils简介 xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词) ...
- jdbc连接数据库以及简单实现(普通JDBC方法实现和连接池方式实现)
@ 目录 总结内容 1. 基本概念 jdbc的概念 2. 数据库连接 数据库的连接 DAO层思想 重构设计 3. 事务 概念 事务的ACID属性 事务的操作 4. 连接池 为什么要使用连接池 连接池分 ...