8.oop-多态
一.继承
1.定义:子类继承父类,会继承父类的属性和方法
2.语法:extends关键字 子类 extends 父类
3.特点:java中的继承是单一继承,子类只能继承一个父类,但是父类可以有多个子类
4.用途:可以将共性的部分写到父类中,子类保留自己的个性特征
5.哪些不能被继承:父类的构造方法,私有的属性和方法
二.方法的重写
1.必须是子类重写父类的方法,所以是发生在两个类中
2.方法的签名必须一致,访问修饰符可以不一样,但子类不能严于父类
三.继承后的代码执行顺序
1.父类的属性--父类的构造方法--子类的属性--子类的构造方法
四.supper关键字
1.定义:代表父类的引用
2.作用:可以调用父类的属性和方法,包括构造方法
3.注意:如果调用父类构造方法,必须是在子类构造方法中的第一句
五.final关键字
1.定义:最终版本
2.可以修饰:类,属性,方法
3.作用:
修饰类:该类不能被继承
修饰属性:叫常量,声明时必须赋值,并且不能改变.常量的命名规则是全部大写
修饰方法:不能被重写
六.多态
1.一种事务的多种形态。
2.实现步骤:
a.子类继承父类,重写父类的方法
b.父类作为形参来代替所有的子类
c.在调用时,用父类的类型指向子类的对象
七.例子
1.请设计多个类,程序员,医生,演说家,歌手四个类
设计相关属性和职业行为,并且看怎么优化设计
共性的属性有:姓名,年龄,性别,职业
共性的方法有:自我介绍,吃饭,睡觉
特性的方法有:各自如何赚钱
特有的属性:各自特有的属性
2.人物采访:
要求:主持人主持一档节目,叫做人物访谈,可以采访各种职业的人
采访过程:
1.主持人先报广告赞助商
2.被采访人自我介绍
3.被采访人介绍自己的赚钱方式
4.主持人说下集预告
设计程序,要求主持人可以采访任何类型的职业人,采访流程不变。
加一个新的采访职业。老师
package com.demo1106;
/**
* 职业案例
* @author allen
*
*/
public class Profession {
public static void main(String[] args) {
Programmer p = new Programmer();
p.coding();
}
} class Person {
//姓名,年龄,性别,职业
String name;
int age;
String sex;
String profession;
final String HELLO = "你好";//常量,一旦声明就必须赋值,并且不能被修改
static{
System.out.println("我是父类静态");
}
public Person() {//子类继承父类,构造子类必先构造父类
System.out.println("我是父类构造方法");
} public void eat(){
System.out.println("吃米饭");
} public void sleep(){
System.out.println("睡觉八小时");
} public void intrduce(){
System.out.println("我叫"+name);
}
} class Programmer extends Person{
static{
System.out.println("我是子类静态");
}
public Programmer() {
super();
System.out.println("我是子类构造方法");
} public void coding(){
super.intrduce();
System.out.println("我赚钱的方法时:我会编码");
}
@Override//这个叫注解 此处的含义是告诉java这个方法是重写父类的方法,他有检查功能
public void sleep(){
System.out.println("我要加班,睡觉4个小时");
} } class Doctor extends Person{
String level;//级别 public void operation(){
System.out.println("我赚钱的方式:做外科手术");
}
@Override
public void eat(){
System.out.println("我吃面,还不用面条鲜");
}
}
package com.demo1106;
/**
* 任务采访案例
*/
public class Interview {
public static void main(String[] args) {
Compere cp = new Compere();
// People p = new Actor("芙蓉姐姐", "网红", "海文公司");
// 父类的类型指向子类的对象
People p = new Doctorer("某某某", "主任医师", "长沙湘雅附二");
cp.doProgram(p);
} } class Compere{
String name; //主持节目
public void doProgram(People p){
//1234
System.out.println("我是主持人:"+name+",感谢CCTV,所有TV");
p.introduce();
p.makeMoney();
System.out.println("我是主持人,感谢收看本级,下期再见");
} // public void doProgramToActor(Actor a){
// //1234
// System.out.println("我是主持人:"+name+",感谢CCTV,所有TV");
// a.intrduce();
// a.makeMoney();
// System.out.println("我是主持人,感谢收看本级,下期再见");
// }
//
// public void doProgramToLawyer(){
// //1234
// }
} //第一次优化
//将被采访人的自己的行为规范到被采访人类中
//将该类作为形参传递给主持人的主持节目方法
class Doctorer extends People{
//String name;来源于父类
String level;//自己值留下特征
//String company;//就职单位 @Override
public void introduce(){
System.out.println("我是:"+name+",我的级别是:"+level+",我就职于:"+company);
}
public Doctorer(String name,String level,String company) {
this.name = name;
this.level = level;
this.company = company;
}
@Override
public void makeMoney(){
System.out.println("我赚钱的方式是做手术做一半要红包");
}
} class Actor extends People{
// private String name;
private String type;
// private String company; public Actor(String name, String type, String company) {
this.name = name;
this.type = type;
this.company = company;
}
@Override
public void introduce(){
System.out.println("我是:"+name+",我就职于:"+company);
}
@Override
public void makeMoney(){
System.out.println("我赚钱的方式是潜规则上位");
}
} //第二次优化:
//1可以将所有被采访者抽取他们的共性到一个父类中。
//2被采访者可以继承这个父类并且重写父类中的方法
//3可以将主持人中的主持方法参数由原来的被采访者改为他们的父类
class People{
String name;
String company; public void introduce(){ } public void makeMoney(){ }
}
package com.demo1106;
//继承的语法案例
public class Demo{
public static void main(String[] args) {
Children c = new Children();
c.name = "张三疯";
c.eat();
}
} class Father {
String name;
int age;
String sex; public void eat(){
System.out.println("我喜欢吃米饭");
} public void run(){
System.out.println("每分钟跑200米");
}
} class Children extends Father{
String characate; public void play(){
System.out.println("我们喜欢撸啊撸");
}
}
/*
* 1.请设计多个类,程序员,医生,演说家,歌手四个类
设计相关属性和职业行为,并且看怎么优化设计
共性的属性有:姓名,年龄,性别,职业
共性的方法有:自我介绍,吃饭,睡觉
特性的方法有:各自如何赚钱
特有的属性:各自特有的属性
*
*/
package com.class1106; public class Class01 { public static void main(String[] args) {
// TODO Auto-generated method stub Person pg=new Programmer();
pg.introduce();
pg.eat();
pg.sleep();
pg.getmoney(); } } class Person{
String name;
int age;
String sex;
String profession; public void introduce(){
System.out.println("我是"+name+",性别是"+sex+",今年"+age+"岁"+",职业是"+profession);
}
public void eat(){
System.out.println("我会吃饭");
}
public void sleep(){
System.out.println("我还会睡觉");
}
public void getmoney()
{ }
} class Programmer extends Person{
String thought;
public void getmoney()
{
System.out.println("我通过写代码赚钱");
}
} class Doctor extends Person{
String cloth;
public void getmoney(){
System.out.println("我通过给人治病赚钱");
}
} class Speaker extends Person{
String eloquence;
public void getmoney(){
System.out.println("我通过演讲赚钱");
}
} class Singer extends Person{
String sound;
public void getmoney()
{
System.out.println("我通过唱歌赚钱");
}
}
/*
* 2.人物采访:
要求:主持人主持一档节目,叫做人物访谈,可以采访各种职业的人
采访过程:
1.主持人先报广告赞助商
2.被采访人自我介绍
3.被采访人介绍自己的赚钱方式
4.主持人说下集预告
设计程序,要求主持人可以采访任何类型的职业人,采访流程不变。
加一个新的采访职业。老师
*/
package com.class1106; public class Class02 { public static void main(String[] args) {
// TODO Auto-generated method stub Host h=new Host();
People p1=new Doctor1("华佗",100,"医生","院长");
h.interview(p1); People p2=new Teacher1("曹操",111,"老师","三国军事学院");
h.interview(p2); }
} class Host{
String name="陈鲁豫"; public void interview(People p)
{
System.out.println("我是主持人"+name+",本节目由五粮液冠名播出");
p.introduce1();
p.makemoney();
System.out.println("本期节目到这里就结束了,感谢cctv,我们下期再见");
}
} class People{
String name;
int age;
String profession; public void introduce1()
{ }
public void makemoney()
{ }
} class Doctor1 extends People{
String level;
public Doctor1(String name,int age,String profession,String level){
this.name=name;
this.age=age;
this.profession=profession;
this.level=level;
}
public void introduce1()
{
System.out.println("我是"+name+",今年"+age+"岁,"+"我的职业是"+profession+",我的级别是"+level);
}
public void makemoney()
{
System.out.println("我是通过做手术赚钱的");
}
}
class Teacher1 extends People{
String school;
public Teacher1(String name,int age,String profession,String school)
{
this.name=name;
this.age=age;
this.profession=profession;
this.school=school;
} @Override
public void introduce1()
{
System.out.println("我是"+name+",今年"+age+"岁,"+"我的职业是"+profession+",我所在的学校是"+school);
}
@Override
public void makemoney()
{
System.out.println("我是通过教学生知识赚钱的");
}
}
八.作业
做一个学员管理系统
功能:1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
思路:创建学员对象
创建学员对象数组
每个功能对应一个方法,可以反复使用
提示:
---------------------------------
欢迎使用学员管理
---------------------------------
功能选择:
1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
请选择:1
添加学员:
姓名:杜典
年龄:16
性别:女
电话:15232654565
籍贯:长沙
添加成功!
是否继续?y/n:y
功能选择:
1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
请选择:2
姓名 年龄 性别 电话 籍贯
杜典 16 女 152656545 长沙
李祥 18 男 154854623 岳阳
是否继续?y/n:y
功能选择:
1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
请选择:3
请输入要删除的学员姓名:李祥
删除成功!
是否继续?y/n:y
功能选择:
1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
请选择:4
请输入要修改的学员姓名:杜典
姓名:哈哈
年龄:88
性别:女
电话:15232654565
籍贯:常德
修改成功!
是否继续?y/n:y
功能选择:
1.添加学员
2.查看学员信息
3.删除学员
4.修改学员
请选择:2
姓名 年龄 性别 电话 籍贯
哈哈 88 女 152656545 长沙
李祥 18 男 152454544 常德
package com.class1104; import java.util.Scanner; public class Test1 { public static void main(String[] args) {
// TODO Auto-generated method stub
//菜单各种询问,各种调用
Start st=new Start();
int s1;
String s2;
StuManager sm=new StuManager();
do{
st.select();
Scanner sc=new Scanner(System.in); System.out.print("请选择:");
s1=sc.nextInt(); switch(s1)
{
case 1:
System.out.println("添加学员:");
sm.addStu();
System.out.println("添加成功!");
break;
case 2:
sm.queryStu();
break;
case 3:
sm.deleteStu();
break;
case 4:
sm.updateStu();
break;
default:
System.out.println("输入错误");
break;
}
System.out.print("是否继续?y/n:");
s2=sc.next();
System.out.println();
}while(s2.equals("y")); }
} class Start{
public Start()
{
for(int i=0;i<25;i++)
{
System.out.print("-");
}
System.out.println();
System.out.println(" 欢迎使用学员管理");
for(int i=0;i<25;i++)
{
System.out.print("-");
}
System.out.println();
}
public void select()
{
System.out.println("功能选择:");
System.out.println(" 1.添加学员");
System.out.println(" 2.查看学员信息");
System.out.println(" 3.删除学员");
System.out.println(" 4.修改学员");
}
} class Student{
// 各种属性。要求封装
private String name;
private int age;
private String sex;
private String phone;
private String place; public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setSex(String sex)
{
this.sex=sex;
}
public String getSex()
{
return sex;
}
public void setPhone(String phone)
{
this.phone=phone;
}
public String getPhone()
{
return phone;
}
public void setPlace(String place)
{
this.place=place;
}
public String getPlace()
{
return place;
}
} // 学员管理类
class StuManager{
Student stu[]=new Student[50];
Scanner sc1=new Scanner(System.in);
public void addStu()
{
Student stu1=new Student();
for(int i=0;i<stu.length;i++)
{
if(stu[i]==null)
{
stu[i]=stu1;
break;
} }
System.out.print("姓名:");
stu1.setName(sc1.next());
System.out.print("年龄:");
stu1.setAge(sc1.nextInt());
System.out.print("性别:");
stu1.setSex(sc1.next());
System.out.print("电话:");
stu1.setPhone(sc1.next());
System.out.print("籍贯:");
stu1.setPlace(sc1.next()); }
public void queryStu()
{
System.out.print("姓名"+"\t");
System.out.print("年龄"+"\t");
System.out.print("性别"+"\t");
System.out.print("电话"+"\t");
System.out.print("籍贯"+"\t"); for(int i=0;i<stu.length;i++)
{
if(stu[i]!=null)
{
System.out.println();
System.out.print(stu[i].getName()+"\t");
System.out.print(stu[i].getAge()+"\t");
System.out.print(stu[i].getSex()+"\t");
System.out.print(stu[i].getPhone()+"\t");
System.out.print(stu[i].getPlace()+"\t");
}
}
}
public void deleteStu()
{
System.out.print("请输入要删除的学员姓名:");
String name1=sc1.next();
boolean b1=false;
for(int i=0;i<stu.length;i++)
{
if(stu[i]!=null)
{
if(stu[i].getName().equals(name1))
{
b1=true;
stu[i]=null;
int j=i;
while(j<stu.length-1)
{
stu[j]=stu[j+1];
j++;
if((j+1)==stu.length-1)
{
stu[j+1]=null;
}
}
i--;
}
}
}
if(b1)
{
System.out.println("删除成功!");
}else{
System.out.println("未找到该学员!");
}
}
public void updateStu()
{
System.out.print("请输入要修改的学员姓名:");
String name2=sc1.next();
boolean b2=false;
for(int i=0;i<stu.length;i++)
{
if(stu[i]!=null)
{
if(stu[i].getName().equals(name2))
{
b2=true;
System.out.print("姓名:");
stu[i].setName(sc1.next());
System.out.print("年龄:");
stu[i].setAge(sc1.nextInt());
System.out.print("性别:");
stu[i].setSex(sc1.next());
System.out.print("电话:");
stu[i].setPhone(sc1.next());
System.out.print("籍贯:");
stu[i].setPlace(sc1.next());
}
}
}
if(b2)
{
System.out.println("修改成功!");
}else{
System.out.println("未找到该学员!");
}
}
}
8.oop-多态的更多相关文章
- OOP 多态/虚函数
// main.cpp // OOP // 虚函数允许继承层次结构中绝大多数特定版本的成员函数被选择执行,虚函数使多态成为可能. // Created by mac on 2019/4/8. // C ...
- OOP多态和继承要点
早期绑定和多态 C#函数重载的签名规则是用参数的类型和数量判断,而不是函数的名字. 函数返回值不作为重载签名. 修饰符不作为签名的一部分,如static 同函数中,多个参数名称要唯一 ref ...
- Java oop 多态
1.多态指对象的多种形态:引用多态与方法多态 注意: A:继承是多态的实现基础 B:方法重写也是多态的体现 2.引用多态 A:父类的引用可以指向本类的对象:父类 对象名 = new 父类( ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- c++ :OOP之静态类型与动态类型
所谓静态类型即类型指针或引用的字面类型:而动态类型即类型指针或引用的实际类型. 这一对概念一般发生在基类和派生类之间. 如: class Base { ..... } class Derived : ...
- 传智播客C++第五期培训视频教程免费下载
C/C++的应用领域几乎无处不在,服务器,嵌入式,物联网,移动互联网,信息安全,游戏,基本上大小通吃.C/C++市场份额高达26%,也就是每四个程序员就有一个C/C++程序员.市场需求量非常大,而且工 ...
- [2018-12-18]ABP中的AsyncCrudAppService介绍
前言 自从写完上次略长的<用ABP入门DDD>后,针对ABP框架的项目模板初始化,我写了个命令行工具Abp-CLI,其中子命令abplus init可以从github拉取项目模板以初始化项 ...
- [2017-10-26]Abp系列——DTO入参验证使用方法及经验分享
本系列目录:Abp介绍和经验分享-目录 声明式的入参验证逻辑 声明式入参验证主要使用了System.ComponentModel.DataAnnotations中提供的各种验证参数的Attribute ...
- C语言入门编程需要掌握的核心要点有哪些? 为你总结了这20个!
摘要: C语言作为编程的入门语言,学习者如何快速掌握其核心知识点,面对茫茫书海,似乎有点迷茫.为了让各位快速地掌握C语言的知识内容,在这里对相关的知识点进行了归纳. 引言 C语言精简的语法集和标准库, ...
- 深入理解OOP(四): 多态和继承(抽象类)
在本文中,我们讨论OOP中的热点之一:抽象类.抽象类在各个编程语言中概念是一致的,但是C#稍微有些不一样.本文中我们会通过代码来实现抽象类,并一一进行解析. 深入理解OOP(一):多态和继承(初期绑定 ...
随机推荐
- 28-30 js 文本全选
要点:使用select(); 上代码: if (e.keyCode === 27){ document.getElementById('input').select() } //当点击键盘esc键时候 ...
- crontab -e 怎么保存后退出?
退出 ctrl + z
- Salesforce 自定义标签在代码中的应用
自定义标签简介 Salesforce 中自定义标签(Custom Label)的作用是存储一般性的文本,可以用于 Apex.Visualforce 页面.Lightning 组件等地方,用于显示提示信 ...
- Linux-pthread如何设置线程的优先级
设置线程优先级的函数: int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param ...
- (网页)jquery-qrcode.js生成二维码
基础用法 <div id="qrcode"></div> <script type="text/javascript"> n ...
- [Python][小知识][NO.4] wxPython 字体选择对话框(O.O 不知道放到那里就放到这个分类的)
1.前言 O.O 前两天回家浪了两天,断更了 哎~~~ o.o 有时候,有木有想改标签或编辑框中内容的字体呀?(o.o 反正我是没有). wxpython也可以说是所在的操作系统,有字体选择器,给我们 ...
- Javascript数组系列二之迭代方法1
我们在<Javascript数组系列一之栈与队列 >中介绍了一些数组的用法.比如:数组如何表现的和「栈」一样,用什么方法表现的和「队列」一样等等一些方法,因为 Javascript 中的数 ...
- 使用Visual Studio Team Services持续集成(四)——使用构建运行测试
使用Visual Studio Team Services持续集成(四)--使用构建运行测试 使用构建来运行测试来验证集成是一个很好的实践. MyHealth.API.IntegrationTests ...
- Python MySQL事务、引擎、索引及第三方库sqlalchemy
本节内容 1.数据库介绍2.事务3.引擎4.索引5.ORM sqlalchemy 1.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一 ...
- [翻译]SQL Server等待事件—THREADPOOL
前言: 本文是对SQLSkills上一篇关于SQL Server中THREADPOOL等待的博客的翻译,本文也不是完全翻译,有些地方适当加入了自己的一些认知.如有翻译不对或不好的地方,敬请指出,大 ...