java第二大特点:继承及super关键字的用法

继承
首先你要知道万类的基类为Object类
只要你创建一个类,都默认继承Object类

1.在继承关系中,“子类就是一个父类”,也就是说子类可以被当作一个父类看待
比如说,父类是人类,子类是学生类,那么学生就是一个人类

2.定义父类 ,就是一个普通的类

3.定义子类的格式:
public class 子类名称 extends 父类名称{
}

this关键字解决成员变量和局部变量(方法)重名的问题
4.子类继承父类以后,父类声明的属性、方法,子类都可以获取到
注意:当父类中有私有的属性或方法时,子类同样可以获取,只是因为封装的原因,不能直接用属性,但可以写入getset方法中调用。

5.子类除了通过继承获取父类的属性和方法外,还可以定义自己独有的方法和属性。

6.java继承是单继承的,一个子类只能继承一个父类,一个父类可以有多个子类

super关键字
为什么用extends后
需要new一个新对象,(对象也叫类的实例,使用关键字new 构造器(…)的方式)
才能访问到父类的方法?
因为new 构造方法,其实省略了super关键字
而super();就会使你调用父类的无参构造方法
从而才能调用父类中其他方法,才有继承这个说法

当然super关键字的用法不止这一点,
super关键字可以修饰属性、方法、构造方法
1).当子类和父类属性重名时,可以通过”super.属性名“的方式调用父类中声明的属性

如果想区分类中属性和局部变量重名,用”this.属性名“

2).子类重写父类方法以后,如果子类想再次调用父类被重写的方法,可以用super.方法名进行修饰
3).super修饰构造方法,通过在子类中使用“super(形参)”的方式来显式调用父类指定的构造方法

注意:在构造方法内部,“super(形参)”必须声明在首行
在构造方法内部,this(形参)或者“super(形参)”只能出现一个。
在构造方法内部,不显示的调用“super(形参)”,默认会调用父类的无参构造方法

定义一个person父类
其中有有参无参构造方法,getset方法 定义的eat方法

public class Person {
 
	 int id=1001;//身份证号
	private String name;//姓名
	private int age;//年龄
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 Person(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		super();
		System.out.println("hehe");
	}
     
   public void eat(){
	   System.out.println("吃饭");
   }
   public void eat(int i){
	   System.out.println("吃饭");
   }
   public void sleep(){
	   System.out.println("睡觉");
   }
   public void info(){
	   System.out.println("姓名:"+name+",年龄:"+age+",学号:"+id);
   }
}

子类学生类

public class Student extends Person{
         int id=1002;//学号
         private String schoolName;
         
	    public Student() {
			super();
     	System.out.println("hehe2");
		}
	    
		public Student(String schoolName) {
			super(1001,"王老五",100);//调用了父类三个参数的构造方法
			//直接传参
			this.schoolName = schoolName;
		}

		public void learn(){
        	 System.out.println("学习");
         }
	    public void eat(){
	    	System.out.println("我是一名学生,因为我是祖国的发多,所以我要吃营养");
	    }
	    public void show(){
	    	System.out.println(this.id);//1002
	        System.out.println(super.id);//1001
	        eat();//子类方法
	        super.eat();//父类方法
	       
	    }
}

测试类
可以自己调用方法看看输出什么

特别说明一点:
受保护的:同一个类中,同一个包下,不同包但继承父类 ,都可以调用受保护的方法或是属性。

public class OrderA {
   public int no;
   protected String name;
   int orderNum;
   private String desc;
   }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值