java中 继承、重写、抽象类、抽象方法、多态的学习
0.复习:
0.1 静态:
1.静态成员变量:作为数据 被所有对象共享 属于类的
2.静态成员方法:工具
3.静态代码块: 初始化数据
0.2 工具类:
1.Arrays:
1.1 toString:将数组转换成字符串
例如{1,2,3} [1,2,3]
1.2.sort:排序
2.Math:
2.1.ceil :向上取整
2.2floor: 向下取整
2.3min: 最小值
2. 4.max: 最大值
0.3继承 :
继承:抽取共性 代码复用
使用继承的场景: 子类 is a 父类
继承关系的注意事项:
1.父子类中的变量没有重名:父类用自己的,子类没有网上找
2 .父子类有个重名的变量:父类访问自己的,子类优先访问自己的,如果没有则网上找
3. 直接访问:子类 子类对象 = 子类() (等号左边是谁调用的变量就是谁的)
4. 间接访问:方法是谁的 方法中访问的变量就是谁的
1.1今日单词:
override重写覆盖
Annotation 注解
abstract 抽象
1.2学习目标:
1.3课堂笔记:
1.继承中重名:
package openBook;
public class Fu {
int number;
public void show() {
System.out.println(number);//省略了this
//System.out.println(this.number);
}
}
package openBook;
public class zi extends Fu {
int number;
}
package openBook;
public class Test {
public static void main(String[]args) {
Fu fu=new Fu();
fu.number=100;//等号左边的类是谁调用的就是谁的变量
zi z=new zi();z.number=200;//等号左边的类是谁调用的就是谁的变量//间接访问 方法是谁的 方法中访问的变量就是谁的fu.show();//show 是父类的 show中访问的number是父类的z.show();//show是父类的 show中访问的number是父类的 (方法是谁的变量就是谁的如果没有变量则找不到子)}
}
```
2.三个重名:
局部变量
成员变量
子类变量 this.子类变量
父类变量 super.父类变量
3.切水果案例:
第一版本 :
抽象类:水果 武器类(main)
切开 切割
第二版本:
1.切苹果 切开 产生白色的特效并加3分
2.切西瓜 切开 产生红色的特效加5分
3.切菠萝 切开 产生黄色的特效 加10分
第三个版本:
更新: 加一个水果 产生特效中加彩色特效
芒果
继承:覆盖重写(重写)
重写:存在父子类中 方法名相同 参数列表相同
重载:存在同类中 方法名相同 参数列表不相同
```java
package openBook;
public class Test {
public static void main(String[]args) {
Fu fu=new Fu();
fu.number=100;//等号左边的类是谁调用的就是谁的变量
//多态:1.父类引用指向子类对象//2.存在重写zi z=new zi();z.number=200;//等号左边的类是谁调用的就是谁的变量//间接访问 方法是谁的 方法中访问的变量就是谁的fu.show();//show 是父类的 show中访问的number是父类的z.show();//show是父类的 show中访问的number是父类的 (方法是谁的变量就是谁的如果没有变量则找不到子)Apple apple=new Apple();//子类完成功能qieGe(apple);apple.cut();Orange orange=new Orange();qieGe(orange);orange.cut();//覆盖重写的作用:复用父类的功能 方法统一//继承是重写的前提 重写是多态的前提}//Fruit f=new Apple()public static void qieGe(Fruit f) {f.cut();}
}
```
4.覆盖重写的注意事项:
```java
package openBook;
/**
*
*
- 继承中的注意事项
- 1.重写对返回值的要求 子类方法的返回值必须小于等于父类方法的返回值
- 子类《=父类
- String Object
- object object
- object String 报错
- String String
- 前提 父类》子类
- Object 万类之祖 所有类都继承子Object Object>所有类
- Object>String
- 2.重写方法的权限(访问修饰符)的要求
- 子类方法的权限必须大于等于父类方法的权限
- 父类可以访问 子类不能访问
- public(公开的) >protected(保护的)>default(什么都不写)> private(私有的)(儿子不可以访问)
- @author lenovo
*protected(保护)子类可以访问 外部可以访问
*public 所有的类都可以
*protected 自己包的类才可以
*private 只有自己类可以
*/
public class Fruit {
String name;
//public object cut(){
//return new Object();匿名对象//保证语法的正确性 //} //}public void cut() {System.out.println("经过很复杂的切割算法,切开了,美滋滋");if(name=="苹果") {System.out.println("白色特效");System.out.println("加3分"); }else if(name=="西瓜") {System.out.println("红色特效");System.out.println("加5分");}//面向对象设计原则://开闭原则:对拓展开放 对修改关闭//破坏封装性:封装性(将一个功能单独放到一个模块中)}
}
```
5.构造函数的继承:
```java
package ExtendsDemo3;
/**
- 1.创建子类对象的时候 会先调用父类的构造函数 如果父类没有无参的 需要super显示调用
- 2.不能调用多次构造函数 父类的构造函数必须放在子类构造函数第一句
- 3.子类必须调用父类构造函数 如果不写 就会默认调用无参的
- super和this关键子的用法
- super的用法:
- 1.在类方法中 调用父类的成员变量
- 2.在子类方法中 调用父类的成员方法 覆盖重写
- 3.在子类方法中可以调用父类的构造函数super();
- this的用法:
- 1.在本类方法中 调用本类的成员变量
- 2.在本类方法中 调用本类的成员方法
- 3.在本类中调用本类的重载构造方法
- @author lenovo
*/
public class Zi extends Fu {
public Zi() {
this(10);//调用本类的构造方法
//作用:初始化构造函数的值
//super(10);
this.func();
// super(); // Constructor call must be the first statement in a constructor 构造函数调用必须是构造函数中的第一个语句//super(10);//显示调用父类构造函数 不写会默认掉用无参的构造函数System.out.println("子类的构造函数");
}
private void func() {super.name="123";
}
public Zi(int a) {
}
}
```
6.抽象类和抽象方法:
package ExtendsDemo5;public abstract class Fu {public abstract void func();//抽象方法只能放在抽象类中//抽象类的作用:1.让子类参考public abstract void func1();public abstract void func2();public abstract void func3();public void func4() {}
}
package ExtendsDemo5;public class Test {public static void main(String[]args) {//1抽象方法的语法//访问修饰符 abstract 返回值 方法名(参数列表);//2.抽象方法必须在抽象类中//访问修饰符 abstract class 类名//3.约束抽象类的子类必须重写抽象类中所有的抽象方法//抽象类的使用://1.抽线类不能直接创建对象//2.想使用父类的对象的化必须使用子类继承抽象类使用(父类引用指向子类对象)//3.约束:抽象类的子类必须重写抽象类所有的抽象方法//4.抽象类(抽象方法)创建子类才可以使用 而且调用的方法都是子类重写后的方法//Fu fu=new Fu();//不能实例化类型 Fu(父类是抽象类)Fu fu=new Zi();fu.func();//
// Object obj=1;//万类之祖指向任意东西
// Object object=new String();
// Object object2=new Zi();}//抽象方法必须在抽象类中//抽象类可以包含非抽象方法}
package ExtendsDemo5;
//父类的抽象方法必须重写
//抽象方法约束子类如果子类继承了一个抽象的父类必须重写完其中的抽象方法
//如果不重写继承者的抽象方法则则被继承者就失去了意义
public class Zi extends Fu {@Overridepublic void func() {// TODO 自动生成的方法存根System.out.println("你好");}public void func1() {}}
7.继承注意事项:
1.单继承:一个类只能有一个父类(一个儿子只能有一个父亲)
错误案例:public class Zi extends Fu,ojbect {@Overridepublic void func() {// TODO 自动生成的方法存根System.out.println("你好");}public void func1() {}}
2.多继承:爷爷 爸爸 儿子 抽象类的子类 如果不重写抽象方法子类也是一个抽象 类
3.如果子类不去重写父类抽象的方法为了使子类能够正常的运行则子类也要写成抽象类
4.一个类只能有一个直接父类 一个父类可以有多个儿子
8.抽象类继承注意事项:
1.抽象类不能创建对象 如果创建 编译无法通过导致报错 只能创建非抽象的子类使用
小贴士:假设抽象类可以创建对象,调用方法的时候调用的就是抽象类的方法,抽象方法没有方法体 没意义
2.抽象类可以有构造方法 是提供给子类创建对象用的
3.抽象类中不一定包含抽象方法 抽象方法必须在抽象类中
4.抽象类的子类必须重写抽象类所有的抽象方法 否则编译无法通过导致报错
9.多态和接口:
案例:
老张开车去东北
人 车 地点(String)
public class Person (){}
public class car(){}
package ExtendsDemo6;public class person {String name;public void drive(Car car) {car.run(name);}
}
package ExtendsDemo6;public class Car {String name;public void run(String name) {System.out.println(name+"开着小汽车"+"去东北");}}
package ExtendsDemo6;import Demo.hebei1.Person;public class Test {public static void main(String[]args) {person p=new person();p.name="老张";Car car=new Car();car.name="宝马";p.drive(car);}
}
java中 继承、重写、抽象类、抽象方法、多态的学习相关推荐
- 11.0_[Java 继承]-继承/重写/抽象类/抽象方法/ final 修饰符
################################################## 目录 继承 什么是继承 继承语法 super 关键字 如何使用继承 java.lang.Objec ...
- Java中继承、接口、多态的作用详解(纯理论)
一.继承.接口与多态的相关问题: 1. 继承的作用?好处?坏处? 继承:通过继承实现代码复用.Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的.继承而得到的类称为子类 ...
- java 包装类可以被继承_【Java基本功】一文了解Java中继承、封装、多态的细节...
本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...
- java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...
为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...
- 黑马程序员——Java基础---继承,抽象,多态,接口,包,内部类
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.继承 (一)继承概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个 ...
- Java中接口、抽象类与内部类学习
2019独角兽企业重金招聘Python工程师标准>>> Java中接口.抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 抽象方 ...
- Java重载和重写6_深入理解Java中的重写和重载
深入理解Java中的重写和重载 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. ...
- java中parent结构_详解java中继承关系类加载顺序问题
详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...
- Java 中接口和抽象类竟然有 7 点不同?
作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列:https://git ...
最新文章
- python idle撤回上一条命令_找回Python IDLE Shell里的历史命令(用上下键翻历史命令怎么不好用了呢?)...
- wxHtml 示例:关于对话框测试
- mac版smali2java_Android反编译apk并重新打包签名(Mac环境)
- Java进阶:java字符串定位语句
- 不要低估AI面临的困境
- js为操作radio
- DCGAN:生成动漫头像
- 六元均匀直线阵的各元间距为_梦得杯—镀覆技术论文大赛丨微机电系统器件电镀镍厚度均匀性的模拟与改进【刘瑞 许文杰 袁妍妍】...
- MFC工作笔记0011---atoi的用法
- Robotframework--随机选取下拉框的字段值进行搜索
- C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
- 第三次作业 词频统计
- Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型 橄榄型 直板型
- 素数生成器的算法【PHP EDITION】
- Pano2VR制作全景图子菜单导航
- Golang代码注释规范及goland代码注释模板配置
- html一键生成海报,微海报在线制作一键生成方法
- 微波射频学习笔记9--------品质因数Q值的意义
- 密码格式 数字+字母
- C语言输入10个分数 去掉最高分,vb输入10个评委给出的分数,去掉最高分和最低分,计算平均分并输出...