Java继承

一.继承的概念和用法

  1. 继承需要符合的关系:is-a;父类更抽象,子类更具体
  2. 继承背后的思想是:基于已存在的类来构建新类
  3. 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类来应对需求
  4. 约定:从其他的类导出的类叫子类,被导出的类叫父类
  5. 在Java中,除了Objiect类外,所有的类都是子类都只有唯一的父类
  1. 继承在OOP中不可或缺,
  2. 创建一个类时,总是在继承
  3. 继承的意义:
    代码重用 ,体现不同抽象层次
  4. 父子类关系:父类更抽象更一般。子类更具体更特殊
  5. 父类初始化先于子类,等所有父类创建后,才创建子类

二.super关键字

  • super关键字的特点:
  1. super跟this关键字的特点类似,super代表的是父类对象的引用
  2. 当子父类成员重名时。可以通过super区分
  3. 子类构造方法中,通过super关键字调用父类的构造方法
  4. 强调:当构造一个子类对象时,一定要调用父类的构造方法来构造父类的对象。构造父类对象的语句必须是子类构造方法语句中的第一条。
package newbao;

class mathstudent extends Student{
	
	
       mathstudent(){

 		  super();		
	}
}


public class testbao {
	
	public static void main(String[] args) {
			
			mathstudent p = new mathstudent();
			System.out.println("age = "+p.name);
			
	}
	
}

三.Java继承之私有权限

  1. 子类对象必须同过构造方法,才能间接访问父类的私有属性成员或方法。

四.Java继承之方法重写-override

4.1什么是方法重写?

  1. 方法重写是指根据需要,对从父类继承来的方法进行改写,是多态机制的前奏

4.2方法重载的注意点

  1. 重写方法和被重写方法,必须具有相同的方法名称,参数列表和返回值。
  2. 重写方法不能比被重写方法更严格的权限
  3. 父类的私有方法不能被重写
  4. 在子类的重写方法中,继续调用父类被重写的方法可以使用super.方法名

4.3注意

  1. 子类方法重写后,调用方法会优先调用子类重写方法
  2. 方法重写不能缩小权限,否则重写无效
  3. 方法重写可以扩大权限
  4. 私有方法无法被重写,否则相当于新加了一个方法

五.Object常见方法(祖传的函数)

  • Java中,所有类都直接或间接继承自Java.lang.Objiect类,可以说Object是Java所有类的祖先即根类
  • Java中任何类都继承了Object类中的方法,主要有:
    1. toString()
    2. equals()
    3. hashcode()
    4. clone()
    5. getClass()
    6. finalize()

5.1 String toString()

  • 返回该对象的字符串描述信息。默认输出格式:类名【字段值,字段值。。。】
  • 只要对象与一个字符串通过”+“连接,系统就会自动调用toString获得对象的字符串描述符
  • 常被改写,可以根据用户的需求,对齐进行重写

5.2 Boolean equals()

  • object类原始功能是判断两个对象是否具有相同的引用,要求判断两个对象状态的相等性

六.继承练习

package learn.zengtiejiang;



class Wapon{
	String name;
	String color;
	String attack;
	int damage;
	int range;
	
	Player attack(int prange,Player p){
		if(prange <= this.range){
			System.out.println(color+name+"cause"+"damage"+damage);
			p.blood = p.blood-damage;
			if(p.blood <= 0){
				
				p.status = "die";
				System.out.println(p.name+p.status);
				
			}
	    }		
		return p;
    }
}	


class sword extends Wapon{
	
	sword(){
		super();
		this.name ="sword1";
		this.color ="black";
		this.attack = "thorn";
		this.damage = 10;
		this.range = 50;		
	}
	
	Player attack(int range,Player p){
		if(range <= this.range){
			
			if(p.blood > 0){
				System.out.println(p.name+" blood -1");
				p.blood = p.blood-damage;
				if(p.blood == 0){
					p.status = "die";
					System.out.println(p.name+" "+p.status);	
					
				}
			
			}else if(p.blood <= 0){
				
				System.out.println(p.name+" has die ,attack  no effect");
				
			}
			
			
		}else{
				
				System.out.println("no effect attack");
		}
		
		return p;
	}
	
	
}


class Player{
	
		String name;
		String rank;
		Wapon wapon;
		int blood;
		String status;
		
	 void attack(int range,Wapon pwapon,Player p){ 
		 
		 
		 pwapon.attack(range,p);
		 
	 } 	
		
	 Player(String pname){
			
		 	Wapon pwapon = new sword();
			this.name  = pname;
			this.rank  = "青铜";
			this.wapon = pwapon;
			this.blood = 100;
			this.status = "alive";		
			
	}
}




public class demo1 {
	
		public static  void main(String[] args) {
						
				Player laowang = new Player("laoiwang");
				Player yasuo = new Player("yasuo");
				Wapon newwapon = new sword();
				
				laowang.wapon = newwapon;
				yasuo.wapon = newwapon;
				
				int range = 10;
				
				int i = 11;

				while(i>0){
					
				yasuo.attack(range, yasuo.wapon,laowang);
				i--;
				
				
					try {		//延时1秒,模拟时钟秒
						Thread.sleep(1000);
					}catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					
				}
				
				while(true){
					if(yasuo.blood == 0){
						
						System.out.println("laowang win");
						return;
						
					}else if(laowang.blood == 0){
						
						System.out.println("yasuo win");
						return;
					}
					
					
				}
				
				
		}
	
}

package learn.zengtiejiang;

class fruits{
	
	String name;
	String characteristic;
	
	void handle(){
		
		System.out.println("all fruits delicious");
		
	}
	
	public fruits(String name){
		
		System.out.println("fruits created");
	}
	
	
}



class Apple extends fruits{
	
	Apple(String name){
		super(name);
		this.name =name;
	}
	
	void handle(){
		
		
		System.out.println("Apple delicious");
		
		
	}
	
}
class banana extends fruits{
	
	banana(String name){
		super(name);
		this.name =name;
	}
	
	void handle(){
		
		
		System.out.println("Banana delicious");
		
		
	}	
	
}


public class factoryyyyy {

	public static void main(String[] args) {
			
		Apple apple1 = new Apple("apple1");
		Apple apple2 = new Apple("apple2");
		banana banana1 = new banana("banana1");
		
		apple1.handle();
		apple2.handle();
		banana1.handle();
		
		
		System.out.println("apple1's name = "+apple1.name);
		System.out.println("apple2's name = "+apple2.name);
		System.out.println("banana1's name = "+banana1.name);
		
	}
	
	
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

elaot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值