中软Java学习笔记第四天

在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

不写时默认为friendly或者default叫啥的都有。网上有说默认为protected,其实并不是。默认的情况下,自己包内
的成员可以随便调用,别的包的成员即使是子类也不能调用。


老师的笔记:

OO三大特征: 继承、封装、多态
     继承的目的: 减少多个class的共有的冗余代码,便于重用

封装的几个关键字总结:
   private
       只能被类自身调用

   public
       A、可以被类自身中的方法调用
       B、可以在子类中直接调用父类的public属性和方法
       C、可以被对象直接调用       

   protected
       A、可以被类自身中的方法调用
       B、可以在子类中直接调用父类的protected属性和方法
       C、不能被对象直接调用(不同的包)
          可以被本包的对象直接调用         dog.health

   默认关键字
         1. 可以在子类中直接调用父类的默认关键字修饰的属性和方法
         2. 可以被本包的对象直接调用
            不能被外部包的对象调用

//这几个关键字的比较,要从三个角度去比:子类、对象、包内/包外
    protected关键字设计的初衷就是为了子类调用父类属性和方法设计的;
          本包对象可以调用protected属性和方法,是friend(友元)的标示------ 用处很少

    默认关键字:
         设计的初衷就是包内可以调用、包外不能调用          




is-a 与  has-a的关系
    子类与父类的关系是is-a,反之不成立。   如Dog is a Pet
     Person类中有一个Company的对象引用,表示这个Person属于哪个Company
     或Student类中班级的对象引用,表示这个学生属于哪个班级;

is-a 是继承的关系; has-a是聚合的关系(aggreagation)

代码的开发原则: 优先使用聚合,然后是继承


子类和父类的调用顺序:
    Dog dog = new Dog("旺财");
    1.  给父类的属性赋值
    2.  调用父类的构造方法进行初始化
    3.  给子类的属性赋值
    4.  调用子类的构造方法进行初始化


   Dog dog = new Dog("旺财");
   参数是从子类的构造中传入,接收参数的是父类的属性,super此处的作用就是参数的二传手
  public Dog(String name) {
        super(name);
  }

  this  ---- 对象自身  
        Dog dog = new Dog("旺财");
        dog对象,这个对象中包含两块内存(Pet + Dog),这两块内存都被称为对象自身

  当父类Pet和子类Dog,都有name属性时,那么在dog中调用this.name指的是调用的Dog类型中的内存;
                                      如果想调用Pet中的name,必须使用super.name;
           正常编程时,没有这种使用场景。父类定义了name属性后,在子类无需再次定义该属性;
                                 这种情况,在dog对象中this.name和super.name的效果是一样的;

                
            Dog dog = new Dog("旺财");            
        System.out.println("dog name:" + dog.name);    //此处调用的是子类的name  
        
        Pet pet = (Pet)dog;                            //dog引用和pet引用存储的地址是一样的
        System.out.println("pet name:" + pet.name);    //此处调用的是父类的name



强调: JAVA中的继承,是单线继承。 JAVA不允许多重继承;
       C++中允许多重继承


子类可以继承父类的那些属性和方法:
     1. 父类的private属性和方法,都不能继承
     2. 父类的protected属性和方法,都可以继承
     3. 父类的public属性和方法,都可以继承
     4. 父类的默认关键字修饰的属性和方法,如果子类和父类在同一个包内,就可以继承;否则不行;


练习题:



1.父类的那些成员不能被子类继承??

Private成员

子类与父类不在同包,使用默认访问权限的成员

构造方法

 

2.继承后对象的初始化顺序:

父类属性、父类构造方法、子类属性、子类构造方法

 

3.关于构造器说法错误的是   b

A. 构造器不属于类成员方法,因此构造器不能被继承

B. 只有构造器才能拥有和类名相同的方法名

C. 一个类可以拥有多个重载的构造器

D. 在子类中调用父类的非默认构造器,必须使用super...)语句,而且该语句必须位于子类构造器的第一行

 

4.当一个类的所有构造器均为私有的,以下哪个描述是正确的? c

A. 不能被其他类实例化  

B. 不能被其他类继承

C. 既不能被其他类实例化,也不能被其他类继承

D. 该类必须被final修饰

 

5.关于类继承的说法,正确的是 b

A. Java 类允许多继承

B. Java接口允许多继承

C. 接口和类都允许多继承

D. 接口和类都不允许多继承

 

6. 对于内部类,以下说法错误的是 c

A. 匿名内部类可以实现接口或继承其他类,但不能同时即实现接口又继承类

B. 匿名内部类不能有任何明确的构造器

C. 内部类可以定义在外部类类体中,也可以定义在外部类的方法体中,和外部类不同,内部类均能使用访问修饰符,并能使用static修饰

D. 在Java中,对内部类的嵌套层次没有限制

 

7.以下关于abstract的说法,正确的是 d

A. abstract只能修饰类

B. abstract只能修饰方法

C. abstract类中必须有abstract方法

D. abstarct方法所在的类必须用abstract修饰


























































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值