概述
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快捷键所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复