Java 面向对象三大特征之一:继承
2018-06-18 03:22:22来源:未知 阅读 ()
继承
使用继承优化设计
使用:
将重复的代码抽取到父类中
继承的优点和实现
优点:
方便修改代码
减少代码量
子类和父类关系是is-a的关系(可以有多个子类,但只能有一个父类)
如何使用继承?
class Pet {
/公共的属性和方法
}
class Dog extends Pet {
/子类特有的属性和方法
}
class Penguin extends Pet {
}
//extends:继承关键字
//一个子类只能继承一个父类
理解继承
子类访问父类成员使用super关键字,访问父类构造方法。super代表父类对象
super();调用父类无参构造方法
super(name);调用父类无有参构造方法
在子类构造方法中调用且必须是第一句访问父类属性
super.name;
访问父类方法
super.print();
继承下构造方法的执行过程
父类静态块中方法----子类静态块中方法----父类的非方法代码块(单一{//内容}代码块)---
父类的构造方法---子类的非方法代码块(单一{//内容}代码块)---子类的构造方法
可以用构造方法为属性赋值
当我们实例化子类无参构造时父类没有自定义构造 系统会自动分配一个无参构造
实例化子类对象默认会先执行父类的构造,在执行子类的构造
super();默认调用父类的无参数构造
注意细节:必须是子类中在构造方法的第一条语句
(无参构造会默认调用)
super(参数列表);调用父类中的有参构造
使用super(参数列表);重复调用父类中的有参构造,默认直接调用父类中的有参数构造,而不会调用父类中的无参数构造
注意:
实例化子类对象时,子类相应的构造,第一行调用父类的哪个构造,就执行哪一个父类构造,,如果没有声明父类构造,默认皆父类的无参构造
子类可以继承父类的哪些资源?
private 不可被继承
子类与父类不在同包,使用默认访问权限的成员不可被继承(默认 友好的 friendly)
构造方法不被继承必须使用super进行访问
论访问修饰符 protected (受保护的):
可以修饰属性和方法
本类,同包,子类可以访问(子类跨包也可以访问)
多重继承关系的初始化顺序?
父类属性>父类构造方法>子类属性>子类构造方法
何时使用继承?
继承与真实世界类似
继承最大的特点是:代码重用(的一种方式)
将子类共有的属性和方法都放在父类当中
构造方法不能被继承,因此不能重写
方法重写的规则:
方法名相同
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于子类
方法重载与方法重写:
方法重写(继承实现):位置在子类,方法名相同,参数表相同,返回值相同或是其子类i,访问修饰符不能比父类更严格
方法重载(一个类中可以有多个同名方法):位置在同类,方法名相同,返回值无关,访问修饰符无关。只与参数列表有关
super关键字来访问父类的成员
super只能出现在子类方法和构造方法中
super调用构造方法时,只能是第一句
super不能访问父类的private成员
废话不多说,上栗子:
package cn.jbit.epet.inherit2; /** * 狗狗类,宠物的子类。 * @author 北大青鸟 */ public class Dog extends Pet { private String strain;// 品种 /** * 有参构造方法。 * @param name 昵称 * @param strain 品种 */ public Dog(String name, String strain) { super(name); //此处不能使用this.name=name; this.strain = strain; } public void setStrain(String strain) { this.strain = strain; } public String getStrain() { return strain; } public void print(){ super.print(); System.out.println("我是一只"+this.getStrain()+"犬。"); } }
package cn.jbit.epet.inherit2; /** * 企鹅类,宠物的子类。 * @author 北大青鸟 */ public class Penguin extends Pet { private String sex;// 性别 /** * 有参构造方法。 * @param name 昵称 * @param sex 性别 */ public Penguin(String name, String sex) { super(name); this.sex = sex; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public void print(){ super.print(); System.out.println("我的性别是"+this.getSex()+"。"); } }
package cn.jbit.epet.inherit2; /** * 宠物类,狗狗和企鹅的父类。 * @author 北大青鸟 */ public class Pet { private String name = "无名氏";// 昵称 private int health = 100;// 健康值 private int love = 0;// 亲密度 /** * 无参构造方法。 */ public Pet() { this.health = 95; System.out.println("执行宠物的无参构造方法。"); } /** * 有参构造方法。 * @param name 昵称 */ public Pet(String name) { this.name = name; } public String getName() { return name; } public int getHealth() { return health; } public int getLove() { return love; } /** * 输出宠物信息。 */ public void print() { System.out.println("宠物的自白:\n我的名字叫" + this.name + ",我的健康值是" + this.health + ",我和主人的亲密程度是" + this.love + "。"); } }
package cn.jbit.epet.inherit2; /** * 测试类,测试类的继承。 * @author 北大青鸟 */ public class Test { public static void main(String[] args) { // 1、创建宠物对象pet并输出信息 Pet pet = new Pet("贝贝"); //pet.print(); // 2、创建狗狗对象dog并输出信息 Dog dog = new Dog("欧欧", "雪娜瑞"); dog.print(); // 3、创建企鹅对象pgn并输出信息 Penguin pgn = new Penguin("楠楠", "Q妹"); pgn.print(); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Java坦克大战(一)
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash