zoukankan      html  css  js  c++  java
  • 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("姓名"+"	");
    		System.out.print("年龄"+"	");
    		System.out.print("性别"+"	");
    		System.out.print("电话"+"	");
    		System.out.print("籍贯"+"	");
    		
    		for(int i=0;i<stu.length;i++)
    		{
    			if(stu[i]!=null)
    			{
    				System.out.println();
    				System.out.print(stu[i].getName()+"	");
    				System.out.print(stu[i].getAge()+"	");
    				System.out.print(stu[i].getSex()+"	");
    				System.out.print(stu[i].getPhone()+"	");
    				System.out.print(stu[i].getPlace()+"	");
    			}
    		}
    	}
    	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("未找到该学员!");
    		}
    	}
    }
    

      

  • 相关阅读:
    一个docker容器中运行多个服务还是弄一堆docker容器运行?
    golang配置 GoGetProxyConfig,goproxy.io的介绍
    Docker下运行Mysql报错 mbind: Operation not permitted
    linux允许root用户远程登录
    docker-compose 安装 mysql并初始化用户与sql文件
    spring报错 xxxxxxxxxxxx has been injected into other beans
    mysql报错[Warning] IP address 'xxxx' could not be resolved: Name or service not known错误解决
    idea 高效找出全部未被使用的代码
    springboot配置Filter的两种方法
    .net core Elasticsearch 查询更新
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10354116.html
Copyright © 2011-2022 走看看