抽象类:
基于继承
抽象类和抽象方法的定义
父类的意义:
把子类共有的属性,抽取出来,达到代码的重用
抽象类不可被实例化
使用抽象类,限制实例化(只有派生类能实例化,父类不能实例化)
关键字:abstract
每个子类的实现不同
abstract也可用于方法---抽象方法
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类(可以不实现)
(抽象类没有方法体)
抽象方法的使用:
1)父类没有必要实例化,采用将父类定义成抽象类型
2)抽象类中的方法未必都是抽象方法
抽象方法必须在抽象类中
3)父类中定义方法,必须由子类实现,每个子类实现的内容不同,采用父类定义抽象方法
4)抽象类不可以被实例化
5)抽象方法必须由子类全部实现
6)抽象方法必须在抽象类中
子类重写抽象方法:
必须与父类抽象方法
名字相同
返回值相同
参数相同
访问权限相同
栗子:
package cn.jbit.epet.inherit2; /** * * @author: 房上的猫 * * @time: 下午3:51:59 * * 博客地址: https://www.cnblogs.com/lsy131479/ * */ 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: 房上的猫 * * @time: 下午3:51:59 * * 博客地址: https://www.cnblogs.com/lsy131479/ * */ /* *狗狗类,宠物的子类。 */ 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: 房上的猫 * * @time: 下午3:51:59 * * 博客地址: https://www.cnblogs.com/lsy131479/ * */ 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: 房上的猫 * * @time: 下午3:51:59 * * 博客地址: https://www.cnblogs.com/lsy131479/ * */ /* * 测试类,测试类的继承。 */ 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(); } }
final用法:
final修饰属性,方法和类
可以修饰类:最终版的类
不希望再被其他类继承
public finla class text{}
可以修饰方法:
方法不希望被重写
public class text{ public final void text1(){} }
可以修饰变量:(常量)最终版的属性值
属性不希望被修改
public class text{ public final int a; }
总结:
抽象类和抽象方法:
抽象类不能被实例化‘
可以有0~多个抽象方法
非抽象类必须重写父类的所有抽象方法
final修饰符:
修饰的类,不能被继承
修饰的方法,不能被子类重写
修饰的变量将编程常量,只能在初始化时进行赋值
(C) 房上的猫 。 保留所有权利。
https://www.cnblogs.com/lsy131479/
如需转载,请注明出处!!!