java面向对象的三大特性——继承

继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。

class Son extends Super{    ...     }

继承父类的子类可以进行以下操作:

  • 1、子类可以不受到限制调用父类非private的属性和方法
  • 2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展
  • 3、子类可以用自己的方式实现父类的方法(父类方法的重写)

继承中需要理解的三个点:构造器、protected关键字、向上转型。

注意点:

当子类的属性与父类的属性名(非private 和 default 修饰的要是同包下)相同时,子类中要调用父类的该属性时,可以使用  super.'属性名'。

当子类将父类的方法重写了,而在子类中需要调用父类的该被重写的方法时,可以使用 super.'方法'。

class SuperClass{
    private int age;
    public String name="aa";
    public void show(){
        System.out.println("SuperClass");
    }
}
class SonClass extends SuperClass{
    
    private String name="SonClass ";
    public void show(){
        super.show();
        System.out.println("SonClass " + name + super.name);
    }
} 

构造器

子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。

1、如果父类不主动创建构造函数或者父类有无参的构造函数则子类可以不考虑父类的构造函数。

2、如果子类需要继承父类的含参构造函数则需要使用super命令(如果父类包含多个含参构造函数则依据参数使用super命令)

3、如果父类建立了构造函数且都含有参数,则子类必须使用super命令。

 

protected

对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。

  • public (对任何人都是可用的)
  • protect (继承的类可以访问以及和private一样的权限)
  • default (包访问权限,即在整个包内均可被访问)
  • private (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

向上转型

向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口

向下转型:父类引用的对象转换为子类类型称为向下转型。

转型需要注意的问题:

向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误。

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。实例如下:

class AA{
    private int age;
    public void show(){
        System.out.println("AA");
    }
}
class BB extends AA{
    private String name;
    public void show(){
        System.out.println("BB");
    }
    public void print(){
        System.out.println("BBBBBBBBBB");
    }
}

public class ExtendsDemo {
    public static void main(String[] args) {
        BB b = new BB();
        //向上转型
        AA ab = (AA)b;
        //不可以调用BB的独有的方法
        ab.show();
        AA a = new AA();
        //向下转型
        //BB ba = (BB)a;//直接报错ClassCastException
        if(a instanceof BB){
            BB ba = (BB)a;
            System.out.println("向下");
        }
    }
}

子类与父类之间的转型总结:

1、父类引用可以指向子类对象,子类引用不能指向父类对象。

2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。

   如Father father = new Son();

3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。

   如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father; 

其中father前面的(Son)必须添加,进行强制转换。

4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效

5、向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。

慎用继承

继承存在如下缺陷:

         1、父类变,子类就必须变

         2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的

         3、继承是一种强耦合关系

 

  问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。

 

转载于:https://www.cnblogs.com/SacredOdysseyHD/p/8352798.html

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值