您的位置:首页 > 编程语言 > Java开发

中软Java学习笔记第四天

2016-07-29 13:37 357 查看
在说明这四个关键字之前,我想就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修饰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: