我是靠谱客的博主 冷静鸭子,最近开发中收集的这篇文章主要介绍Day02--3继承、方法覆盖、多态、final、package、import、访问控制权限、IDEA快捷键1.继承2.方法覆盖/重写(override[官方]/overwrite)3.多态4.final关键字(最终的、不可变的)5.包机制(packet)6.import语句7.访问控制权限8.IDEA快捷键,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.继承

①继承基本的作用:代码复用

②最重要的作用是:有了继承才有了以后“方法的覆盖”和“多态机制”

③语法格式:

[修饰符列表] class 类名 extends 父类名{

类体 = 属性 + 方法;

}

**④java语言中继承只支持单继承,**一个类不能同时继承很多类;在c++中支持多继承

⑤关于继承中的术语:

B类继承A类,其中:

A类称为:父类,基类,超类,superclass

B类称为:子类,派生类,subclass

⑥在JAVA语言中子类继承父类都继承哪些数据?

私有的不支持继承;构造方法不支持继承;其他数据都可以被继承

⑦虽然java中只支持单继承,但一个类中可以间接集成其它类,如:

C extends B{

}

B extends A{

}

A extends T{

}

C直接继承B类,但C类间接继承T、A类

⑧java语言中假设一个类没有显示的继承任何类,该类默认继承javaSE库中提供的java.lang.Object类,java语言中任何一个类中都有Object类的特征

例:

package com.day03jicheng.test06;

public class ExtendsTest02 {public static void main(String[] args) {
​		C c = new C();
​		c.doSome();}
}
class A{public void doSome() {
​		System.out.println("do some");}
}
class  B extends A{

}
class C extends B{

}

2.方法覆盖/重写(override[官方]/overwrite)

①什么时候用方法重写?

当父类中的方法已无法满足当前子类的业务需求时,子类有必要将父类中继承过来的方法进行重新编写,这个重新编写的过程称为方法重写/方法覆盖

②什么条件满足后方法会发生重写?

方法重写发生在具有继承关系的父子类之间;方法名相同,返回值类型相同;形参列表相同【建议方法重写时,尽量复制粘贴】;访问权限不能更低,可以更高;抛出异常不能更多,可以更少

③注意:

私有方法不能继承,所以不能覆盖;

构造方法不能继承,所以不能覆盖;

静态方法不存在覆盖

覆盖只针对方法,不谈属性

3.多态

①语法机制:

Cat继承Animal

Bird继承Animal

Cat和Bird之间没有任何继承关系

②关于多态中涉及的概念:

向上转型(upcasting):子类型–>父类型【自动类型转换】

向下转型(downcasting):父类型–>子类型【强制类型转换】,需要加强制类型转换符

注意:无论是向上转型还是向下转型,两种类型之间必须有继承关系;没有继承关系的话,程序无法编译通过

向上转型:

例:

Animal a2 = new Cat();

a2.move();

假设想让以下对象执行catMouse()方法,怎么办?

a2无法直接调用,因为a2类型是Animal,Animal中没有catMouse()方法,可以将a2强制类型转换为Cat类型【父类转换成子类–向下转型】

注意:向下转型也需要两种类型之间必须有继承关系,不然编译报错,强制类型转换需要加强制类型转换符

package com.day03duotai.test08;

public class Cat extends Animal {public void move() {
​		System.out.println("猫在走猫步");}public void catthMouse() {
​		System.out.println("猫抓老鼠");}
}

什么时候需要使用向下转型?

当调用的方法是子类型中特有的,在父类型中不存在时,必须进行向下转型

例:

Cat c2 = (Cat)a2;

c2.catthMouse();

出现异常:

类型转换异常:java.lang.ClassCastException

这种异常总是在“向下转型”的时候会发生

向上转型只要编译通过,运行一定不会出问题

例: Animal a3 = new Bird();

Cat c3 = (Cat)a3;

如何避免向下转型出现的ClassCastException?

使用instanceof运算符可以避免出现以上异常

instanceof运算符如何使用?

①语法格式:

(引用 instanceof 数据类型)

②以上运算符的执行结果类型是布尔类型,结果可能是true/false

③关于运算结果true/false

假设:(a instanceof Animal)

true表示:a这个引用指向的对象是一个Animal类型

false表示:a这个引用指向的对象不是一个Animal类型

例:

package com.day03duotai.test08;

public class Test02 {public static void main(String[] args) {//父类型引用指向子类型对象//向上转型
​		Animal a1 = new Cat();
​		Animal a2 = new Bird();//向下转型【只有当访问子类对象中特有的方法】if(a1 instanceof Cat) {
​			Cat c1 = (Cat)a1;}if(a2 instanceof Bird) {
​			Bird b1 = (Bird)a2;}}
}

多态在实际开发中的作用,以主人喂养宠物为例说明多态的作用:

①分析:主人喂养宠物这个场景需要进行类型的抽象:

主人【类】:主人可以喂养宠物,所以主人有喂养的动作

宠物【类】:宠物可以吃东西,所以宠物有吃东西的动作

②面向对象的核心:定义好类,然后将类实例化为对象,给一个环境驱使一下,让各个对象之间协作起来形成一个系统

例:

package com.day03duotai.test08;

public class Cat03 {
	public void eat() {
​		System.out.println("小猫正在吃鱼");}
}
package com.day03duotai.test08;

public class Master03 {//喂养宠物的方法**public void feed(Cat03 c) {****c.eat();**}
}

package com.day03duotai.test08;

public class Test03 {public static void main(String[] args) {
​		Master03 m = new Master03();
​		Cat03 c = new Cat03();
​		m.feed(c);}
}

③多态的作用是什么?

降低程序的耦合度,提高程序的扩展力;能使用多态尽量使用多态;父类型引用指向子类型对象

核心:面向抽象编程,尽量不要面向具体编程

关于Eclipse怎么链接源码?

打开某个.class字节码文件,当没有看到源码的时候:点击“Attached Source”

Workspace…【源码在当前的工作区中】

External File…【源码在某个压缩包中】

External Folder…【源码在某个目录中】

以后尽量所有程序都连接源码,没有源码从网上找

以后所学习的类库,一般包括三部分:

源码【可以看源码来理解程序】

字节码【程序开发过程中使用的就是这部分】

帮助文档【对开发提供帮助】

注意使用时版本统一

4.final关键字(最终的、不可变的)

final修饰的类无法被继承;

final修饰的方法无法被覆盖;

final修饰的变量一旦赋值后,不可重新赋值【不可二次赋值】

final修饰的实例变量,必须手动赋值,不能采用系统默认值

final修饰的引用一旦指向某个对象后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收;但所指向的对象内部的内存可以被修改

例:

final User user = new User(30);

user.id = 50;

final修饰的实例变量是不可变的这种变量一般和static联合使用,被称为“常量”

常量的定义语法格式为:public static final 类型 常量名 = 值;

java规范中要求所有常量名字全部大写,每个单词之间使用下划线连接

常量:实际上常量和静态变量一样,区别在于:常量的值不能变

常量和静态变量,都是存储在方法区,且都是在类加载时初始化

常量一般都是公开的

例:

public static final String GUO_JI = “中国”;

5.包机制(packet)

①包又叫packet,java中引入package这种,语法机制主要是为了方便程序的管理,不同功能的类被分门别类放到不同的软件包中,查找、管理比较方便,易维护

②怎么定义package?

在java源程序的第一行上编写package语句,只能编写一个语句

语法结构:package 包名;

③命名规范:

公司的域名倒叙 + 项目名 + 模块名 + 功能名;(采用这种方式重名的几率很低,因为公司域名具有全球唯一性)

④包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则

⑤一个包将来对应的是一个目录,目录之间使用.隔开

补充:

​ ①为什么要使用package?

​ package是java中包机制,包机制的作用时为了方便程序的管理

​ 不同功能的类分别存放在不同的包下(按照功能划分的,不同的软件包具有不同的功能)

​ ②package怎么用?

​ package是一个关键字,后面加包名**

​ 例:package com.wj.java;

​ 注意:package语句只允许出现在java源代码的第一行

​ ③包名的命名规范:

​ 一般采用公司域名倒序的方式(因为公司域名具有全球唯一性)

** 包名命名规范:公司域名倒序 + 项目名 + 模块名 + 功能名**

​ ④带有package的java程序怎么编译,怎么运行?

** 编译 :javac -d . HelloWorld.java**

​ javac :负责编译的命令

​ -d:带包编译

​ . :代表编译后生成的东西放到当前目录下(.代表当前目录)

​ HelloWorld.java:被编译的java文件名

** 运行:java 完整类名**

6.import语句

①import语句用来完成导入其他类,同一个包下的类不需要导入,不在同一个包下需要手动导入

②import语法格式:

import 类名;

import 包名.*;

③import语句需要编写到package语句之下,class语句之上

最终结论:什么时候需要import?

不是java.lang包下,且不再同一个包下时,需要使用import进行引入

补充:

​ import什么时候使用?

A类中使用B类

A类和B类都在同一个包下,不需要使用import

A类和B类不在同一个包下,需要使用import

java.lang.*;这个包下的类不需要使用import导入

​ import怎么使用?

import语句只能出现在package语句之下,class声明语句之上

import语句还可以采用星号的方式

​ 例:

​ import com.wj.java.HelloWorld–>import com.wj.java.*

7.访问控制权限

访问控制权限修饰符:

①访问控制权限修饰符来表示控制元素的访问范围

②访问控制权限修饰符包括:

public 【表示公开的,在任何位置都可以访问】

protected【同包,子类】

缺省【修饰符不写】【同包】

private【表示私有的,只能在本类中访问】

③可以表示修饰类、变量、方法。。。

类只能采用public和缺省的修饰符进行修饰【内部类除外】

补充:

​ ①访问控制权限有哪些?

private 私有

protected 受保护的

public 公开

默认的

以上的4个访问控制权限,控制的范围是什么?

private 表示私有的,只能在本类中访问

public 表示公开的,在任何位置均可访问

“默认”表示只能在本类以及同包下访问

protected表示只能在本类、同包、子类中访问
在这里插入图片描述

public > protected > 默认 > private

②访问控制权限修饰符可以修饰什么?

属性(4个均可用)

方法(4个均可用)

类(public和默认能用,其他不行)

接口(public和默认能用,其他不行)

。。。

③JDK类库的根类:Object

任何一个类默认继承Object,就算没有直接继承,最终也会有间接继承

④Object类中有哪些常用的方法?

1>去源代码中(通常较麻烦)

2>去查阅java类库的帮助文档

⑤什么是API?

应用程序需编程接口

整个JDK的类库就是一个javase的API

每一个API都会配置一套API帮助文档(一般每一份API都对应一份API帮助文档)

第一章:环境的搭建

第二章:java语言基础

标识符

关键字

字面值

变量

数据类型

运算符

控制语句

方法

递归

总结第三章内容:

1.面向对象和面向过程的区别

2.面向对象的三大特征:OOA OOD OOP

3.类和对象的概念

4.类的定义

5.对象的创建和使用

6.JVM内存管理

7.参数传递

8.面向对象的封装性

9.面向对象的继承

10.面向对象的多态

11.this关键字

12.static关键字

13.final关键字

14.访问控制权限修饰符

15.构造函数

16.方法的重写/覆盖

17.package/import

8.IDEA快捷键

①快速生成main方法:psvm + 回车

②快速生成System.out.println():sout + 回车

③删除一行:ctrl + y 复制一行:ctrl + d

④怎么运行:代码上右键–>run;或者点击左侧的绿色箭头/ ctrl + shift + F10

⑤左侧窗口中的列表怎么展开?怎么关闭?:左箭头关闭,右箭头展开,上下箭头移动

⑥IDEA中退出任何窗口,都可以使用esc键

⑦任何新增/新建/添加的快捷键是:alt + insert

⑧窗口变大变小:ctrl + shift + F12

⑨切换java程序,从HelloWorld切换到User:alt + 右箭头 或者alt + 左箭头

⑩切换窗口:alt + 标号 alt + 1(打开,关闭)

⑪提示方法的参数:ctrl + p

⑫单行注释:ctrl + /

多行注释:ctrl + shift + /

⑬IDEA中怎么定位方法/属性/变量?:光标停到某个单词下面,单词可能是方法名,变量名

停到单词下面后,长按ctrl键,出现下划线,点击跳转

⑭IDEA中纠正错误的快捷键:alt + 回车

⑮查看一个类的属性和方法:ctrl + F12

注意:IDEA是自动保存,不需要手动保存

最后

以上就是冷静鸭子为你收集整理的Day02--3继承、方法覆盖、多态、final、package、import、访问控制权限、IDEA快捷键1.继承2.方法覆盖/重写(override[官方]/overwrite)3.多态4.final关键字(最终的、不可变的)5.包机制(packet)6.import语句7.访问控制权限8.IDEA快捷键的全部内容,希望文章能够帮你解决Day02--3继承、方法覆盖、多态、final、package、import、访问控制权限、IDEA快捷键1.继承2.方法覆盖/重写(override[官方]/overwrite)3.多态4.final关键字(最终的、不可变的)5.包机制(packet)6.import语句7.访问控制权限8.IDEA快捷键所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部