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("未找到该学员!");
		}
	}
}

  

猜你喜欢

转载自www.cnblogs.com/wlxslsb/p/10354116.html
OOP