第四章 继承

继承:extends

          定义:子类继承父类的成员

                    1.继承可以使代码的重用率提高,冗余降低,程序的可扩展性提升

                    2.继承只能子类继承父类

                    3.子类可以继承父类使用public修饰的成员,除了构造方法,但可以调用

                   4.父类private修饰的内容子类不能继承

                    5.一个子类只能继承一个父类,一个父类可以被多个子类继承

                    6.Java允许连续继承

                    7.所有类都直接或间接的继承Object类;(Object类是所有类的祖先类)

                    8.子类虽然继承父类,但也可有特有的属性和方法

          注意的问题:

                    1、非私有成员才可以被继承

                    2、重写方法:重写方法必须和被重写方法具有相同的方法名称、参数列表、返回值类型;重写方法的访问权限不能小于被重写方法

          super继承父类的子类可以使用super调用父类的构造方法,super语句必须是子类构造方法的第一条语句;子类构造方法默认隐藏调用父类无参构造方法;子类也可以通过super调用父类的成员

/*
 * 父类
 */
public class People {
	public String name;
	public String sex;
	public int age;
	public final String type = "people";
	
	/*
	 * 不同对象的类型不同 所以在子类中也声明了type常量
	 */
	public void show() {
		System.out.println("I am a " + type);
	}
	/*
	 * 继承是 is a 的关系  即 子类是父类
	 * 现实生活中广泛的父子关系不等同于java中的继承关系
	 */
}

 

/*
 * 子类
 */
public class Student extends People {
	/*
	 * 子类继承了父类的成员变量与方法
	 */
	public final String type = "student";
	

	public Student() {
		/*
		 *  通过super() 可以调用父类的构造方法
		 *  子类构造方法默认隐藏调用父类无参构造方法
		 *  可以super(参数) 指定调用有参构造方法
		 */
		super();
	}

	/*
	 * 子类若是不重写父类的show()方法, 通过继承的方法,输出type,只会输出"people"
	 * 通过重写show()方法,可以输出自己独有的类型
	 */
	@Override
	public void show() {
		// 通过super可以调用父类的方法
		super.show();
		System.out.println("I am a " + type + ",too.");
	}
	
	public void f(){
		//子类也可具有自己独有的成员,当成员与父类继承的成员冲突
		//通过super可以访问父类的成员变量
		System.out.println(type +" is a "+ super.type);
	}
}

 

多重继承的初始化

  • 如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法
  • 如果子类的构造方法中通过super显示调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
  • 如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
  • 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止

 

访问修饰符

          protected  : 受保护的

          default  : 默认

          private  : 私有

          public  : 公有

只有public、默认修饰符才可以修饰类;默认的修饰符,只能在相同包的对象中使用

              同包的相互访问:只有私有的无法被访问、继承;私有的只能在当前类内部访问

              不同包的相互访问:

                    继承:只有public类 中的public、protected成员才可以在子类内部使用;在子类外部只能,通过子类对象名只能访问public成员

                    无任何关系:只有public类中public成员可以被访问

 

Object

          Object类是所有类的父类;所有类都间接或直接继承了Object类

              1.取得对象信息的方法:toString()

               该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。

               2.对象相等判断方法:equals()

               该方法用于比较对象是否相等,而且此方法必须被重写。

               3.对象地址:hashCode()

               该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashCode

               4.getClass()

               获取当前对象所属的类信息,返回Class对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值