首页 / JAVA / Java温故而知新-多态性
Java温故而知新-多态性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java温故而知新-多态性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9569字,纯文字阅读大概需要14分钟。
内容图文
在面向对象的程序开发过程之中,有三大主要特性:封装性,继承性,多态性
Object 类
对象的比较
有缺陷的比较(一般人的想法)
示例代码
示例1:
class Person {
private String name ;
private String addr ;
private char sex ;
private int age ;
public Person() {}
public Person(String name, String addr) {
this(name, addr, '男', 18) ; // 调用四参构造
}
public Person(String name, String addr, char sex, int age) {
this.name = name ;
this.addr = addr ;
this.sex = sex ;
this.age = age ;
}
public String toString() { // 覆写Object类中的方法
return "姓名:" + this.name + "、地址:" + this.addr + "、性别:" + this.sex + "、年龄:" + this.age ;
}
}
class Student extends Person { // 继承可以实现类的代码重用
private double math ;
private double english ;
public Student() {}
public Student(String name, String addr) {
super(name, addr) ; // 调用父类中的双参构造
}
public Student(String name, String addr, char sex, int age, double math, double english) {
super(name, addr, sex, age) ; // super调用父类构造
this.math = math ;
this.english = english ;
}
public String toString() {
return super.toString() + ",数学成绩:" + this.math + "、英语成绩:" + this.english ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
Person person = new Student("小李", "北京-天安门", '男', 18, 99.8, 99.9) ;// 向上转型
System.out.println(person) ;
}
}
示例2:
class Employee { // 员工
private String name ;
private String sex ;
private int age ;
public Employee() {}
public Employee(String name, String sex, int age) {
this.name = name ;
this.sex = sex ;
this.age = age ;
}
public String toString() {
return "姓名:" + this.name + "、性别:" + this.sex + "、年龄:" + this.age ;
}
}
class Manager extends Employee { // 管理层
private String job ;
private double income ;
public Manager() {}
public Manager(String name, String sex, int age, String job, double income) {
super(name, sex, age) ;
this.job = job ;
this.income = income ;
}
public String toString() {
return super.toString() + "、职位:" + this.job + "、年薪:" + this.income ;
}
}
class Staff extends Employee {
private String dept ;
private double salary ;
public Staff() {}
public Staff(String name, String sex, int age, String dept, double salary) {
super(name, sex, age) ;
this.dept = dept ;
this.salary = salary ;
}
public String toString() {
return super.toString() + "、部门:" + this.dept + "、月薪:" + this.salary ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
get(new Manager("小李", "男", 20, "部门经理", 60000.0)) ;
get(new Staff("小张", "女", 19, "后勤部", 90000.0)) ;
}
public static void get(Employee emp) {
System.out.println(emp) ;
}
}
示例3:面向过程统计字母数量
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
String str = "want you to know one thing" ; // 给定一个字符串信息
String result [] = str.split("") ; // 按照每一位进行拆分
int oCount = 0 ; // 保存字母o的个数
int nCount = 0 ; // 保存字母n的个数
for (String temp : result) {
if ("o".equalsIgnoreCase(temp)) {
oCount ++ ;
}
if ("n".equalsIgnoreCase(temp)) {
nCount ++ ;
}
}
System.out.println("字母O的个数:" + oCount + "、字母N的个数:" + nCount) ;
}
}
示例4:面向对象的方式统计字母数量
class StringUtil { // 定义一个字符串的工具类
private String content ; // 字符串的内容
public StringUtil(String content) {
this.content = content ;
}
public void setContent(String content) {
this.content = content ;
}
public String getContent() {
return this.content ;
}
}
class CharCount extends StringUtil { // 实现数据统计
private int oCount ; // 统计字母o的个数
private int nCount ; // 统计字母n的个数
public CharCount(String content) {
super(content) ; // 调用父类中的单参构造
this.handleContent() ; // 构造方法直接进行字符串的处理
}
public void handleContent() { // 处理传入的数据信息
String result [] = super.getContent().split("") ; // 按照每一位进行拆分
for (String temp : result) {
if ("o".equalsIgnoreCase(temp)) {
this.oCount ++ ;
}
if ("n".equalsIgnoreCase(temp)) {
this.nCount ++ ;
}
}
}
public String toString() {
return "【字符统计结果】字母“O”的个数:" + this.oCount + "、字母“N”的个数:" + this.nCount ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
String str = "want you to know one thing" ; // 给定一个字符串信息
StringUtil util = new CharCount(str) ;
System.out.println(util) ;
}
}
示例5:数组扩充操作
5、
class Array { // 进行数组的操作
private int data [] ; // 提供有一个数组类型
private int index ; // 数据增加索引号
public Array() {
this(5) ; // 如果使用的是无参构造,默认设置5个大小
}
public Array(int len) { // 动态决定数组大小
if (len > 0) {
this.data = new int[len] ; // 开辟新的数组大小
} else {
this.data = new int[1] ; // 保证不出错
}
}
public void increment(int cap) { // 设置增长容量
int newData [] = new int [this.data.length + cap] ; // 开辟新的数组
System.arraycopy(this.data,0, newData,0, this.data.length) ; // 数组拷贝
this.data = newData ; // 修改指向,产生垃圾
}
public boolean add(int data) { // 实现数据增加
if (this.index < this.data.length) { // 此时还有空余位置
this.data[this.index ++] = data ; // 保存增加数据
return true ; // 返回true表示增加成功
}
return false ;
}
public int[] getData() {
return this.data ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
Array arr = new Array() ; // 默认的大小为5个
System.out.println(arr.add(8)) ;
System.out.println(arr.add(3)) ;
System.out.println(arr.add(10)) ;
System.out.println(arr.add(5)) ;
System.out.println(arr.add(20)) ;
arr.increment(3) ; // 扩充3个容量
System.out.println(arr.add(30)) ;
System.out.println(arr.add(80)) ;
System.out.println(arr.add(1)) ;
printArray(arr) ;
}
public static void printArray(Array array) {
for (int temp : array.getData()) {
System.out.print(temp + "、") ;
}
System.out.println() ;
}
}
示例数组排序:
class Array { // 进行数组的操作
private int data [] ; // 提供有一个数组类型
private int index ; // 数据增加索引号
public Array() {
this(5) ; // 如果使用的是无参构造,默认设置5个大小
}
public Array(int len) { // 动态决定数组大小
if (len > 0) {
this.data = new int[len] ; // 开辟新的数组大小
} else {
this.data = new int[1] ; // 保证不出错
}
}
public void increment(int cap) { // 设置增长容量
int newData [] = new int [this.data.length + cap] ; // 开辟新的数组
System.arraycopy(this.data,0, newData,0, this.data.length) ; // 数组拷贝
this.data = newData ; // 修改指向,产生垃圾
}
public boolean add(int data) { // 实现数据增加
if (this.index < this.data.length) { // 此时还有空余位置
this.data[this.index ++] = data ; // 保存增加数据
return true ; // 返回true表示增加成功
}
return false ;
}
public int[] getData() {
return this.data ;
}
}
class SortArray extends Array { // 数组排序的子类
public SortArray() {}
public SortArray(int len) {
super(len) ;
}
public int[] getData() { // 覆写父类方法
java.util.Arrays.sort(super.getData()) ; // 数组排序
return super.getData() ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
Array arr = new SortArray() ; // 默认的大小为5个
System.out.println(arr.add(8)) ;
System.out.println(arr.add(3)) ;
System.out.println(arr.add(10)) ;
System.out.println(arr.add(5)) ;
System.out.println(arr.add(20)) ;
arr.increment(3) ; // 扩充3个容量
System.out.println(arr.add(30)) ;
System.out.println(arr.add(80)) ;
System.out.println(arr.add(1)) ;
printArray(arr) ;
}
public static void printArray(Array array) {
for (int temp : array.getData()) {
System.out.print(temp + "、") ;
}
System.out.println() ;
}
}
示例:数组反转
class Array { // 进行数组的操作
private int data [] ; // 提供有一个数组类型
private int index ; // 数据增加索引号
public Array() {
this(5) ; // 如果使用的是无参构造,默认设置5个大小
}
public Array(int len) { // 动态决定数组大小
if (len > 0) {
this.data = new int[len] ; // 开辟新的数组大小
} else {
this.data = new int[1] ; // 保证不出错
}
}
public void increment(int cap) { // 设置增长容量
int newData [] = new int [this.data.length + cap] ; // 开辟新的数组
System.arraycopy(this.data,0, newData,0, this.data.length) ; // 数组拷贝
this.data = newData ; // 修改指向,产生垃圾
}
public boolean add(int data) { // 实现数据增加
if (this.index < this.data.length) { // 此时还有空余位置
this.data[this.index ++] = data ; // 保存增加数据
return true ; // 返回true表示增加成功
}
return false ;
}
public int[] getData() {
return this.data ;
}
}
class SortArray extends Array { // 数组排序的子类
public SortArray() {}
public SortArray(int len) {
super(len) ;
}
public int[] getData() { // 覆写父类方法
java.util.Arrays.sort(super.getData()) ; // 数组排序
return super.getData() ;
}
}
class ReverseArray extends Array { // 数组反转
public ReverseArray() {}
public ReverseArray(int len) {
super(len) ;
}
public int[] getData() { // 覆写父类方法
int center = super.getData().length / 2 ; // 确定反转次数
int head = 0 ;
int tail = super.getData().length - 1 ;
for (int x = 0 ; x < center; x ++) {
int temp = super.getData()[head] ;
super.getData()[head] = super.getData()[tail] ;
super.getData()[tail] = temp ;
head ++ ;
tail -- ;
}
return super.getData() ;
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String args[]) {
Array arr = new ReverseArray() ; // 默认的大小为5个
System.out.println(arr.add(8)) ;
System.out.println(arr.add(3)) ;
System.out.println(arr.add(10)) ;
System.out.println(arr.add(5)) ;
System.out.println(arr.add(20)) ;
arr.increment(3) ; // 扩充3个容量
System.out.println(arr.add(30)) ;
System.out.println(arr.add(80)) ;
System.out.println(arr.add(1)) ;
printArray(arr) ;
}
public static void printArray(Array array) {
for (int temp : array.getData()) {
System.out.print(temp + "、") ;
}
System.out.println() ;
}
}
教程来源
https://www.bilibili.com/video/BV1PE41187Vd?p=125
内容总结
以上是互联网集市为您收集整理的Java温故而知新-多态性全部内容,希望文章能够帮你解决Java温故而知新-多态性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。