JAVA自学笔记09
JAVA自学笔记09
1、子类的方法会把父类的同名方法覆盖(重写)
2、final:
1)可修饰类、方法、变量
2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承
3)修饰方法时:该方法将无法被重写
4)变量为常量,其值不可被改变
修饰引用类型时:引用类型的地址值不能变但其成员变量(堆内存的值)等是可以变的
5)初始化时机:
被final修饰的变量只能赋值一次
在构造方法完毕前修饰变量,避免其被构造方法改变(非静态的常量)
3、多态
1)某一个事物,在不同时刻表现出不同的状态
2)前提与体现:有继承关系、有方法重写、有父类引用指向子类对象
即格式为 父类名 父类对象名 = new 子类名();
3)成员访问特点:
①构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
②成员变量:编译运行都看左边的类,以父类所有的成员变量为准
③成员方法:编译看左边,运行看右边(子类重写父类同名方法)
④静态方法:编译看左边,运行看左边(不存在方法重写)
4)优点:
①提高代码维护性
②提高代码扩展性
5)弊端:不能使用子类特有的功能
解决:①创建子类对象调用相关方法即可
②(本方式较好,因为没有再创建新的对象,节约内存。向下转型,要求该f必须是能够转换为Zi的)使用多态后,将创建的父的引用赋值给子类的引用,即
Zi z=(Zi)f;//使用了强制类型转换
向上转型:
Fu f=new Zi();
6)多态继承中的内存图解
7)多态中的对象变化内存图解
异常:ClassCastException 类不匹配,易在向下转型中出现
8)多态多层继承时
子类中有和父类中一样的方法,就重写
子类中没有和父类中出现过分方法,该方法就被继承过来
@例题1:看程序写结果
class A {
public void show() {
show2();
}
public void show2() {
System.out.println("我");
}
}
class B extends A {
/*
public void show() {
show2();
}
*/
public void show2() {
System.out.println("爱");
}
}
class C extends B {
public void show() {
super.show();
}
public void show2() {
System.out.println("你");
}
}
public class DuoTaiTest4 {
public static void main(String[] args) {
A a = new B();
a.show();//多态继承,运行看右边,B类由A类继承了自己没有的show(),
//show()调用show2(),根据就近原则,输出“爱”
B b = new C();//运行看右边,调用super.show()即B类的show(),接
//着调用show2(),由就近原则,输出“你”
b.show();
}
}
例如:
class Fu{
public int num=100;
public void show(){
System.out,println("show fu");
}
public static void Function(){
System.out,println("Fuction fu");
}
}
class Zi extends Fu{
public int num=1000;
public int num2=200;
public void show(){
System.out,println("show zi");
}
public void method(){
System.out,println("method zi");
}
public static void Function(){
System.out,println("Fuction zi");
}
}
class Demo{
public static void main(String args[]){
Fu f = new Zi();
System.out,println(f.num);//100
System.out,println(f.num2);//找不到符号
f.show();//show zi
f.method();//报错:找不到符号
f.Funcction();//Fuction zi
}
}
2、抽象类
1)在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
2)特点:
①抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名{}
public abstract void 方法名();//省去花括号
②抽象类不一定有抽象方法但有抽象方法的类一定是抽象类
③抽象类不能实例化,不能创建关于抽象类的对象,但它有构造方法 。抽象类的子类要么也是抽象类,要么重写抽象类中所有的抽象方法。进而通过多态的方式创建对象间接实现实例化:
抽象类名 对象名=new 继承抽象类的类构造方法名();
3)抽象类的成员的特点:
①成员变量:可以是变量也可以是常量
②构造方法:有构造方法,但不能实例化,它是用作子类访问父类数据时进行初始化的
③成员方法:可以有抽象方法,限定子类必须完成某几种特定的功能;也可以有非抽象方法被子类所继承,以提高代码复用性
4)抽象类的注意事项:
一个类若无抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以,这样做的意义是不允许创建对象
abstract不能和哪些关键字共存?
private 冲突
final 冲突
static 无意义
3、接口
1)利用接口定义额外功能
2)接口特点:
①格式:interface 接口名{}
类实现接口:class 类名 implements 接口名{}
//定义动物培训接口
interface AnimalTrain{
public abstract jump();//定义抽象方法
}
class Cat implement AnimalTrain{
public void jump(){
System.out.println("猫跳");
}
}
class Demo{
public static void main(String args[]){
AnimalTrain at=new Cat();
at.jump();//猫跳
}
}
②接口不能直接实例化,要通过多态
具体类多态、抽象类多态、接口类多态(最常用)
③接口的子类:要么是抽象类,要么重写接口中所有的抽象方法
3)接口的成员的特点
①一般来说:接口名+Impl这种格式是接口的实现类的命名规则
②接口的成员变量默认为常量,即默认修饰符为public static final
③ 没有构造方法 。所有的类都默认继承一个类Object(类层次结构的根类、每个类都要用Object作为父类)
④接口成员方法不能带方法体,即接口成员方法必须是抽象的且必须是public的,
默认修饰符public abstract
4、
1)类与类的关系:继承关系,只能是单继承,但可以多层继承
2)类与接口:类实现接口,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
3)接口与接口
继承关系,可以单继承,也可以多继承
4)抽象类与接口的区别
①成员区别:常量、变量、抽象方法、非抽象方法/常量、抽象方法
②关系区别:见1)~3)
③抽象类被继承体现的是“is a”的关系,体现共性
接口实现的是“”
JAVA自学笔记09的更多相关文章
- JAVA自学笔记14
JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...
- JAVA自学笔记05
JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- JAVA自学笔记04
JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...
- JAVA自学笔记07
JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...
- JAVA自学笔记10
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- JAVA自学笔记11
JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...
- JAVA自学笔记12
JAVA自学笔记12 1.Scanner 1)JDK5后用于获取用户的键盘输入 2)构造方法:public Scanner(InputStream source) 3)System.in 标准的输入流 ...
随机推荐
- 【Android】Android 设置Activity窗体 不显示标题和全屏显示
[一]Android 设置Activity窗体 不显示标题 android:theme="@android:style/Theme.NoTitleBar" <activity ...
- 通过java代码进行impala和kudu的对接
对于impala而言,开发人员是可以通过JDBC连接impala的,有了JDBC,开发人员可以通过impala来间接操作kudu: maven导包: <!-- https://mvnreposi ...
- ELK5.3日志分析平台&部署
https://www.cnblogs.com/xing901022/p/6030296.html ELK简介: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现 ...
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...
- 导入项目报错:Type Java compiler level does not match the version
1,导入项目报错一般是因为缺少jar包或者是jar包冲突 2,导入的jar包版本问题 3,环境需要重新修改,比如build path 中重新add libararies 遇到这种compiler环境问 ...
- 数据库构架设计中的Shared Everthting、Shared Nothing、和Shared Disk
Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer Shared Disk:各个处理单元使用自己的私有 ...
- 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结
2018-03-11 20165235祁瑛<Java程序设计>第二周学习总结 教材学习内容总结 第二章要点: 在这一章中我学到了很多东西: (1)布尔类型boolean,布尔类型的赋值只能 ...
- 《Android高级进阶》读书笔记
<Android高级进阶>是据我所知的市面上唯一一本技术工具书,比较的高大全,作者的目的是为了对全领域有个初步的概念 No1: 在Android系统中,拥有事件传递处理能力的类有以下三种 ...
- IO流巧记图
本文特意将各种IO流的类总结到一起,作成图,方便记忆 1.流的写入和读取 2.字符输入流 3.字符输出流 4.字节输入流 5.字节输出流 6.概念杂记 * Buffered;带缓冲区的字符读取流,高效 ...
- Codeforces 633C Spy Syndrome 2 【Trie树】+【DFS】
<题目链接> 题目大意:给定一个只有小写字母组成的目标串和m个模式串(里面可能有大写字母),记目标串反过来后的串为S,让你从m个模式串中选出若干个组成S串(不区分大小写).输出任意一种方案 ...