目录
1.什么是继承?
比如我国封建社会的皇权继承制,儿子继承父亲的皇位就叫继承。
2.为什么使用继承?
在多个类中可能有重复的代码,我们将重复的代码抽取到父类中,以减少代码的冗余。
3.如何使用继承?
使用关键字extends:
如以下代码:
父类Female:
public abstract class Female {
private String name;
private int age;
double shiYu;
public Female() {
}
public Female(String name, int age, double shiYu) {
this.name = name;
this.age = age;
this.shiYu = shiYu;
}
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 double getShiYu() {
return shiYu;
}
public void setShiYu(double shiYu) {
this.shiYu = shiYu;
}
@Override
public String toString() {
return "Female{" +
"name='" + name + '\'' +
", age=" + age +
", shiYu=" + shiYu +
'}';
}
public abstract void goRestraunt();
}
子类Girl :
public class Girl extends Female{
int health;
public Girl() {
}
public Girl(int health) {
this.health = health;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
@Override
public String toString() {
return "Girl{" +
"health=" + health +
'}';
}
public void goRestraunt(){
System.out.println("今天想吃好吃的。");
System.out.println();
}
public void goToWork(){
if (health<80){
System.out.println("今天不想上班。");
System.out.println();
}else if (health>=80){
System.out.println("又是元气满满的一天呐。");
System.out.println();
}
}
}
BoyFriend类:
public class BoyFriend {
public void restraunt(Female female){
if (female.getShiYu()>80){
female.goRestraunt();
}else {
System.out.println("今天只想和杜哥哥去散心。");
System.out.println();
}
}
public void toWork(Female female){
if (female instanceof Girl) {
Girl girl = (Girl) female;
girl.goToWork();
}
}
}
TestBoyFriend类:
public class TestBoyFriend {
public static void main(String[] args) {
Boyfriend boyfriend=new Boyfriend();
Female female=new Girl();
female.setName("");
female.setAge(23);
Girl girl=new Girl();
Scanner scanner=new Scanner(System.in);
System.out.println("姓名:"+female.getName());
System.out.println("年龄:"+female.getAge());
for (int i = 0; i < 2; i++) {
System.out.println("请输入今天的食欲:");
female.shiYu=scanner.nextDouble();
Boyfriend .restraunt(female);
System.out.println("是否退出:Y/N");
String select=scanner.next();
if (select=="Y"){
break;
}
}
for (int i = 0; i <2 ; i++) {
System.out.println("请输入今天的健康指数:");
girl.health=scanner.nextInt();
Boyfriend .toWork(female);
System.out.println("是否退出:Y/N");
String select=scanner.next();
if (select=="Y"){
break;
}
}
}
}
4.访问修饰符有哪几种?分别有什么特点?
private:私有的只能在本类中访问。
default:只能在本类和同包中使用。
protected:本类、同包以及其子类可以访问。
public:公共的,处处可访问
5.关于super
关于super后面会在在面向对象地关键字章节中对其进行详细介绍,现在先简单了解其用法。
super.属性:调用父类中属性。
super.方法:调用父类中方法。
super.构造方法:调用父类中的构造方法。(需要放于首行)
6.方法的重写
(1)什么是方法的重写?
a、出现在有子父类的情况下
b、方法名和参数列表都需要相同
c、返回值类型相同或者是其子类
d、访问修饰符的权限不能严于父类
(2)为什么要进行方法的重写?
方法的重写是指在子类中重新定义(覆盖)父类中已有的方法。Java中使用方法的重写可以达到以下效果:
1. 扩展原有的方法功能:子类重写父类的方法可以添加新的功能和逻辑,从而增强原有方法的功能,使之更加强大。
2. 改进原有方法的实现:子类重写父类的方法可以改进原有方法的实现,提高方法的性能和效率。
3. 更好的代码复用性:当多个类中含有相同的方法时,使用方法的重写,可以使子类继承父类的公共方法,从而减少代码重复。
4. 实现多态性:Java中的多态性指的是同一个方法被不同的对象调用时,可以有不同的表现形式。子类重写父类的方法可以实现多态性,从而使程序更加灵活。
总之,使用方法的重写有助于提高代码的可维护性、可扩展性和可读性,是Java中面向对象编程的基础。
(3)怎样进行方法的重写?
其实关于这一点我们早在第一篇文章中就已经提到并重写了equals方法。现在我们再来简单概括总结一下:
重写前:
public Pet method(){
return new pet();
}
重写后:
public Dog method(){
return new Dog();
}
7、Object
在Java中,Object类是所有类的根类,即是所有类的父类。它包含一些通用的方法,可以被所有子类继承和使用,例如:equals()、toString()、hashCode()、getClass()等方法。由于所有的类都是Object类的子类,因此Object类提供了一些通用的方法,可以被所有的子类继承和使用。因此,Object类在Java中具有非常重要的地位。
8、抽象类
我们在前文中已经用到了抽象类,现在我们对其进行详细介绍:
(1)为什么要使用抽象类?
Java中的抽象类提供了一种机制,用于定义不能被实例化的类,并且这些类只能被继承。这些类通常包含抽象方法,这些方法没有实现,但是需要在子类中实现。以下是使用抽象类的一些原因:
1. 实现代码重用:如果一个类需要在多个相关类中实现相同的功能,那么可以使用抽象类来实现这些功能。子类可以继承抽象类,并且可以重写其中的方法以满足它们的特定需求。
2. 实现类和接口之间的中间状态:抽象类是介于类和接口之间的中间状态。它可以实现一些方法,并且可以定义抽象方法,这些方法需要在子类中实现。这种灵活性使得抽象类成为实现类和接口之间的优秀桥梁。
3. 限制类的实现:如果一个类不希望被实例化,又希望提供一些默认的实现,那么可以使用抽象类。由于抽象类不能被实例化,所以只能被子类继承并且实现其中的方法。
总体而言,抽象类为Java提供了一种非常重要的设计模式,它可以帮助开发人员构建可维护和可扩展的代码。
(2)什么是抽象类抽象方法?
a.抽象方法必须在抽象类中,抽象类中不一定有抽象方法。
b.子类继承抽象的父类需要实现父类的所有方法,除非是子类也是抽象类。
c.抽象类没有方法体。
d.抽象类不能创建对象。
9、关于final
final意为最后的,被final修饰过的属性不能被修改,修饰的类不能被继承,修饰的方法不能被重写。详细代码将于关键字章节中展现。
关于继承的知识点到此结束。