Java面向对象编程4

继承


1、继承是Java实现‘代码重用’的重要手段之一。Java只支持单继承,一个类只能有一个直接父类。java.lang.Object类是所有Java类的祖先。
继承表达的是is a 的关系,Dog is a Pet 。狗继承宠物,苹果继承水果

语法:  修饰符 SubClass extends SuperClass{
//类定义部分
}(子类=>SubClass,父类=>SuperClass。)

继承:通过extends关键字实现。
(优点:方便修改代码;减少代码量、避免代码重复。)

修饰符如果是public,则该类在整个项目中可见,若无public修饰符,则该类只在当前包可见(friendly);不可以是用哪个private 和protected修饰类

super() 调用父类的构造方法

调用父类方法:super.方法名();

子类可以继承父类的:

  1. 继承public和protected修饰的属性和方法,无论子类父类是否同包
  2. 继承默认权限修饰符修饰的属性和方法,但是子类父类要同包
  3. 无法继承private修饰的属性和方法
  4. 无法继承父类的构造方法

 

重写

如果从父类继承的方法不能满足子类的需求,则在子类中可以对父类的同名方法进行重写(覆盖),以符合需求

(子类中重写的方法和父类中被重写的方法必须具有相同的方法名参数列表,返回值类型必须和被重写方法的返回值类型相同或是其子类。)

调用父类方法:super.方法名();

super代表对当前对象的直接父类对象的默认引用,在子类中通过super来访问父类成员

如果子类构造方法中没有通过super显示调用父类的有参构造,也没有通过this显示调用自身其他构造方法,则系统会默认先调用父类的无参构造方法

扫描二维码关注公众号,回复: 2348535 查看本文章

1.父类必须出现在子类(子类的方法和构造方法)

2.可以访问父类成员,如父类的属性,方法,构造方法

3.无法通过super访问private成员

Object类的重写

java.lang.Object类是所有Java类的祖先,所有Java类都直接或间接继承了java.lang.Object,在定义一个类时,如果没有使用extends关键字继承某个类,那么这个类直接继承Object类。所有对象都继承这个类的方法。

instanceof用于判断一个引用类型所引用的对象是否是一个类的实例,返回一个boolean值

可以用来判断是否是父子关系

//Java中的instanceof是用来判断某个实例是不是某个类的实例。

例如:A instanceof B (A为某个实例,B为某个类名) 
如果A为B的实例,则:(A instanceof B)==true 反之==false 

Object类中的equals()方法用于比较两个对象是否是同一对象,若是,返回true

抽象类和抽象方法

抽象类:不能实例化。抽象类中可以有零到多个抽象方法。非抽象类若继承抽象类,则必须重写父类的所有抽象方法。
(抽象类和抽象方法的特点:①都通过abstract关键字来修饰。②抽象类不能实例化,类中可以有零到多个、甚至全部都可以是抽象方法。③抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明成抽象类。子类必须重写所有的抽象方法才能实例化,否则子类还是抽象类。
abstract可以用来修饰类和方法,但不能用来修饰属性和构造方法。)

用于父类不能被实例化

抽象方法:没有方法体;必须在抽象类里;必须在子类中被实现,除非子类是抽象类。
(例:public abstract void print();)

final:

用final修饰的类,不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变为常量,只能在初始化时进行赋值,不能在其他地方修改。

final和abstract是功能相反的两个关键字:

·   abstract可以用来修饰类和方法,不能用来修饰属性的和构造方法

·   final可以用来修饰类、方法和属性,不能修饰构造方法

对于引用型变量,一定要区分对象的引用值和对象属性两个概念,使用final修饰引用型变量,变量不可以再指向另外的对象,但是所指对象的内容却是可以改变的。

final Dog dog = new Dog("ee");

dog.name="QQ"; 正确

dog = new Dog("qq"); 错误

abstract不能喝private/static/final一起用

采用面向对象思想进行设计:①发现类②发现类的属性③发现类的方法④优化设计⑤梳理运行过程。

猜你喜欢

转载自blog.csdn.net/weixin_41985061/article/details/81073518