2020-08-12

第十次课
一.
package com.hpe.demo;

//狗类
public class Dog extends Pet {

private String starin;//品种

public String getStarin() {
	return starin;
}

public void setStarin(String starin) {
	this.starin = starin;
}

public Dog() {
	super();
}

public Dog(String name, String starin) {
	super(name);
	this.starin = starin;
}

//重写吃饭的方法
public void eat(){
	super.health=super.health+3;//吃饱以后健康值加3
	System.out.println("狗狗吃饱了,健康值加3");
}

//重写输出的方法
public void info(){
	super.info();//调用父类未重写前的方法
	System.out.println("我的品种是:"+this.starin);
}

public void sleep(){
	System.out.println("狗狗在呼呼大睡");
}

//接飞盘
public void catchingFlyDisc(){
	System.out.println("狗狗正在接飞盘:");
	super.love=super.love+5;
	super.health-=10;
}

}
二.
package com.hpe.demo;

//主人类
public class Master {

private String hostName;//主人姓名

public String getHostName() {
	return hostName;
}

public void setHostName(String hostName) {
	this.hostName = hostName;
}

//给狗狗喂食
public void feed(Dog dog){
	dog.eat();
}

//给企鹅喂食
public void feed(Penguin p){
	p.eat();
}

//玩游戏
public void play(Pet pet){
	if(pet instanceof Dog){
		Dog dog=(Dog)pet;
		dog.catchingFlyDisc();
		dog.info();
		
	}else if(pet instanceof Penguin){
		Penguin p=(Penguin)pet;
		p.swimming();
		p.info();
	}
	
}

}
三.
package com.hpe.demo;

//企鹅类
public class Penguin extends Pet{

private String sex;//性别

public String getSex() {
	return sex;
}

public void setSex(String sex) {
	this.sex = sex;
}

public Penguin() {
	super();
}

public Penguin(String name,String sex) {
	super(name);
	this.sex = sex;
	
}

//重写吃饭的方法
public void eat(){
	super.health=super.health+5;
	System.out.println("企鹅吃饱了,健康值加5");
}

//重写输出的方法
public void info(){
	super.info();
	System.out.println(",我的性别是:"+this.sex);
}

//游泳
public void swimming(){
	System.out.println("企鹅正在游泳:");
	super.love=super.love+5;
	super.health-=10;
}

}
四.
package com.hpe.demo;

/**

  • final关键字:代表最终的意思
  • 可以修饰什么?
  • 1.修饰类
  • 2.修饰方法
  • 3.修饰成员变量
  • 4.修饰局部变量
  • 修饰类,这个类有什么特点?
  • 这个类不能被继承,他就是一个太监类,但是可以继承别的类
  • 修饰方法,这个方法有什么特点?
  • 代表这个方法是一个最终方法,不能被重写
  • 修改成员变量有什么特点?成员变量的值不可改变
  • 1.成员变量不会再有默认值
  • 2.如果使用final关键字,必须直接对成员变量进行赋值
  • 修饰局部变量的特点。局部变量的值不能改变,一般用它修饰一个常量

*/
public class Person {

private String name;
private final String sex="男";



public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public String getSex() {
	return sex;
}



public final void eat(){
	System.out.println("吃饭");
}

@Override
public String toString() {
	return "Person [name=" + name + ", sex=" + sex + "]";
}

}
五.
package com.hpe.demo;

//宠物类
public class Pet {

private String name;//昵称
protected int health=100;//健康值
protected int love=0;//亲密的


public int getLove() {
	return love;
}
public void setLove(int love) {
	this.love = love;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getHealth() {
	return health;
}
public void setHealth(int health) {
	this.health = health;
}
public Pet(String name, int health) {
	super();
	this.name = name;
	this.health = health;
}


public Pet(String name) {
	super();
	this.name = name;
}
public Pet() {
	super();
}


//吃食
public void eat(){
	System.out.println("宠物吃食");
}

//打印宠物信息
public void info(){
	System.out.println("名字叫:"+this.name+",我的健康值是:"+this.health+",我和主人的亲密度:"+this.love);
}

}
六.
package com.hpe.demo;

/**

  • static :静态的 (重点)
  • 1.static修饰成员变量(类变量)
  • (1).修饰成员变量,这个变量就不属于对象了,而属于类本身,我们就可以通过"类名.属性名"
  • (2).只要通过我这个类创建的对象,这些对象都可以共享这个属性
  • (3).当其中一个对象对类变量进行更改以后,其他对象的这个类变量也会更改,
  • VS实例变量(非static的变量,属于对象本身,各个对象都各自有一套副本)
  • (4).类变量是随着类的加载而加载,类变量的生命周期大于实例变量
  • (5),类变量放在方法区的静态域里面
  • 2.static修饰方法(类方法)
  • (1).修饰方法,这个方法就属于类本身了,我可以通过"类名.方法名()"进行调用
  • (2).随着类而加载
  • (3).在静态方法里面只能调用静态变量和静态方法,相反在普通放里面可以调用静态方法和静态变量,因为静态方法或静态变量
  • 加载时机早于实例变量和实例方法的加载时机
  • (4).不能使用this和supper关键字
  • 3.static修饰代码块
  • 代码块的作用完成初始化
  • (1)非静态代码块:
  • 可以给类的属性进行初始化操作,同时还可以调用类的方法(静态的 ,非静态的);
  • 里面可以有输出语句
  • 每创建完一个对象,非静态代码块就加载一次
  • (2)静态代码块
  • 里面可以有输出语句
  • 随着类加载而加载,只会执行一次
  • 静态代码的加载时机早于非静态代码块
  • 静态代码块里面只能调用类变量和类方法
  • 作用:jdbc 驱动 用户名 密码 数据库的连接地址
  • 对属性赋值:(1)默认初始化 (2)显示的初始化 (3)通过set方法或者构造方法 (4)代码块

*/
public class SportsMan {

//实例变量
private String name;
private int age;
//类变量
 static String nation="中国";
 //代码块:初始化
 {
	 name="张三";
	 age=12;
	 show();
	 show1();
	 nation="1";
	 System.out.println("非静态的代码块");
	 
 }
 //前面加一个static就是一个静态代码块
 static{

// name=“李四”;
// show();
show1();
System.out.println(“这是一个静态代码块”);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public String getNation() {
	return nation;
}
public void setNation(String nation) {
	this.nation = nation;
}
public SportsMan(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
public SportsMan() {
	super();
}
@Override
public String toString() {
	return "SportsMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";
}

//普通方法
public void show(){//加载时机晚

// System.out.println(this.age);
// System.out.println(nation);
// show1();
System.out.println(“这是一个普通方法”);
}

//静态方法
public static void show1(){//加载的时机早

// //this代表当前对象
// System.out.println(nation);
// //show();
System.out.println(“这是一个静态方法”);
}

}
七.
package com.hpe.demo;

public class Student extends Person{

// public void eat(){
//
// }

}
八.
package com.hpe.demo;

/**

  • 1.什么是多态性?

  • (1)同一个动作与不同的对象产生不同的行为

  • (2)多态指的是一个对象的多种形态

  • 2.多态的体现方式

  • (1).使用继承:不同的子类重写父类方法后,体现出来的形式不一样

  • (2)接口的实现

  • 3.形成多态的必要条件

  • (1)继承:存在子类和父类的关系

  • (2)接口实现:定义一个类实现对应的接口

  • (3)重写:子类重写了父类的方法

  • (4)重载:调用相同的方法名,实现的功能时不一样

  • (5).子类对象的多态性(重点):父类的引用指向子类的实例

  • 4.程序分为两种状态,一个编译状态,一个是运行状态

  • 对于多态来说,编译时看左边,你这个对象是定义的是什么类型就是什么类型,讲pet对象看做是Pet类型

  • 运行时,看右边,真正执行的对象,也就是子类对象(Dog),执行的也是子类重写后的方法。

  • 5.上转型和下转型

  • (1)上转型:讲子类对象交给父类引用,可以自动转换

  • (2)下转型:把父类转成子类 强制类型转换

  • 6.对象的多态性

  • (1).父类的引用指向子类的实例

  • (2).在编译期间调用的父类的方法,真正执行的时候,执行的是子类的方法

  • (3).编译看左边,运行看右边
    */
    public class Test {

    public static void main(String[] args) {

     //创建宠物对象
     Pet p=new Pet("宠物");
     p.eat();
     p.info();
     
     //狗类对象
     Dog dog=new Dog("小金", "金毛");
     dog.eat();
     dog.info();
     
     //创建企鹅对象
     Penguin pe=new Penguin("Q妹", "女");
     pe.eat();
     pe.info();
     
     //创建主人对象
     Master m=new Master();
     //调用喂食的方法
     m.feed(dog);
     m.feed(pe);
     System.out.println("=============================================");
     //子类对象的多态性,父类的引用指向子类的实例
     Pet pet=new Dog("小迪", "泰迪");//安全性更高  向上转型
     pet.info();//
     //父类对象可以调用狗类独有的方法吗?不可以
     //在编译期间,程序会把pet对象看成是父类对象,而父类方法没有sleep()方法
     //pet.sleep();
     
     //现在我就想通过pet去调用sleep()方法? 强制类型转换
     //short转成int,自动类型转换,int转成short,得强制类型换行
     //把父类转成子类同一个道理
     Dog dog1=(Dog)pet;//向下转型
     dog1.sleep();
     
     //pet前面已经转成了dog,现在相当于把dog转成企鹅
    

// Penguin pe1=(Penguin)pet;
// pe1.swimming();
//instanceof:用于判断类型是否匹配
if(pet instanceof Dog){//判断父类pet是否属于子类对象Dog的实例
Dog dog2=(Dog)pet;
dog2.sleep();
}else if(pet instanceof Penguin){
Penguin pe1=(Penguin)pet;
pe1.swimming();
}

	System.out.println("================================================");
	Pet dog2=new Dog("小花","哈士奇");
	Pet pe1=new Penguin("小黑", "男");
	Master m1=new Master();
	m1.play(dog2);//接飞盘
	m1.play(pe1);//游泳
	
	
	
	

}

}
九.
package com.hpe.demo;

public class TestPerson {

public static void main(String[] args) {
	Person p=new Person();
	p.setName("小明");
	System.out.println(p.toString());
	
	final int num=10;
	//num=20;
	System.out.println(num);
	
	final int A;
	A=10;
	//A=12;

}

}
十.
package com.hpe.demo;

public class TestSportsMan {

public static void main(String[] args) {
	SportsMan s1=new SportsMan("老王", 35);
	SportsMan s2=new SportsMan("老李", 32);
	s1.setNation("中国");
	SportsMan.nation="china";
	s1.show();
	SportsMan.show1();
	
	System.out.println(s1);
	System.out.println(s2);

}

}
另一个文件
一.
package com.hpe.demo1;

import org.omg.Messaging.SyncScopeHelper;

//黑白打印机
public class BlackPrinter extends Printer {

public void print(){
	System.out.println("黑白打印机开始打印");
}

}
二.
package com.hpe.demo1;

//彩色打印机
public class ColorPrinter extends Printer {

public void print(){
	System.out.println("彩色打印机开始打印");
}

}
三.
package com.hpe.demo1;

//打印机类
public class Printer {
public void print(){
System.out.println(“打印”);
}

}
四.
package com.hpe.demo1;

public class Test {

public static void main(String[] args) {
	
	//黑白
	Printer black=new BlackPrinter();
	black.print();
	
	//彩色
	Printer color=new ColorPrinter();
	color.print();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值