A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 袁文博老师 于 2016-1-28 17:56 编辑

同样的课程、老师、就业,更好的学习环境,更低的学习成本!
内地学员,选择长沙校区,靠谱!!!
报名热线:0731-85833115
QQ:51106849
【长沙校区】助你成功!【Java基础笔记】
——面相对象 下篇
上篇连接:【长沙校区】助你成功!【Java基础笔记】面相对象上篇
http://bbs.itheima.com/thread-275365-1-1.html
(出处: 黑马程序员IT技术论坛)

继承

概述:
1.      多个类中存在相同属性和行为时,将这些内容抽取到单个类中,那么继承类无需再定义被继承中已有非私有属性和方法,只需要继承即可;
2.      子类只能继承一个父类,但父类可被多个子类继承;通俗点说,也就是一个儿子只能有一个亲爹,但是一个爹可以有多个儿子;
3.       通过extends关键字让类与类之间产生继承关系;
4.       不要仅为了获取其他类中某个功能而去继承,类与类之间要有所属("isa")关系;
5.       继承提高了代码的复用性;
6.       继承是多态的前提;
代码举例:




super关键字
概述:
1.      this和super的用法很相似,this代表本类对象的引用,super代表父类的内存空间的标识;
2.      当本类的成员和局部变量同名用this区分,当子父类中的成员变量同名用super区分父类。
3.      当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容;
代码举例:
  1. class Father{
  2.         private double money;//私有属性 私房钱
  3.         public String name;                //非私有属性 姓名
  4.         public int age;                        //非私有属性 年龄
  5.         
  6.         //非私有方法
  7.         public void show(){
  8.                 System.out.println("父类-非私有方法!");
  9.         }
  10.         //私有方法
  11.         private void show2(){
  12.                 System.out.println("父类-私有方法!");
  13.         }
  14. }

  15. class Child extends Father{
  16.         public int age;                        //非私有属性 年龄
  17.         //子类方法
  18.         public void show(){
  19.                 //在子类中是this关键字调用属性或方法时,如果子类有,就调用子类的,如果没有这个属性或方法,就会到它父类去找,如果父类也没有,就会报错。也就是说,this可以调用父类非私有属性或方法
  20.                 System.out.println("子类重写父类show()方法!通过this或super关键字可以调用父类非私有成员!"+this.age+this.name+super.show3());
  21.                 super.show();
  22.                 System.out.println("------下面是show2()-------");
  23.         }
  24.         //子类方法
  25.         public void show2(){
  26.                 //通过this调用本类show()方法,this也可以调用父类其它非私有方法,但本来有父类重写的方法时,this调用的是本类的方法
  27.                 this.show();               
  28.                 //通过super调用父类show()方法
  29.                 super.show();               
  30.                 //super.show2();      通过super也不能调用父类的私有方法
  31.         }
  32. }
复制代码
输出结果:

重载(overload)和重写(override)
概述:
重载-overload:
1.       一个类中或者子父类关系中存在多个同名方法,并且参数列表不同的方法叫重载;
2.       子父类关系中:子类中的方法和父类中的方法构成了重载关系;
重写-override:
1.      子父类关系中,子类中存在与父类中方法声明完全一样的方法叫重写;
2.      父类私有方法,子类不能重写;
3.      重写时,子类修饰符权限要大于等于父类;
4.      使用被覆盖的方法可以通过super.函数名获取;

代码举例:


多态
概述:
对象在不同时刻表现出来的不同状态;
前提:
1.       要有继承关系或实现关系;
2.       父类或者接口的引用指向或者接收自己的子类对象;
3.       要有方法重写或实现关系;
特点:
多态的存在提高了程序的扩展性和后期可维护性;
扩展性:同一个方法可以接收不通类型的数据;
可维护性:以前修改10行代码,现在只需要修改1行代码,减少了维护成本;
代码举例:
声明3个类,一个动物父类,一个猫子类,另一个狗子类,猫狗类继承动物父类;





Instanceof

抽象类
概述:
1.       抽象就是从多个事物中将共性的、本质的内容抽取出来,不能实例化(不能创建对象);
2.       抽象类被abstract修饰,被abstract修饰的方法叫抽象方法,只有声明,没有方法体,继承了抽象类的类必须实现其中所有的抽象方法;
3.       成员变量:可以是抽象的也可以使非抽象的;
4.       构造方法:有构造方法,为了让子类来访问进行初始化;
5.       成员方法:可以有抽象方法,也可也没有抽象方法;
6.       抽象类中,abstract不允许与private、static、final关键字共存:
a)        private : 被abstract修饰,就代表该方法或类必须被实现,所以就和private私有就冲突了;
b)        static : static属于类,如果抽象方法设为static静态的,那么该方法没有方法,通过类名调用,没有意义;
c)        final : final理解为最终形式,不允许被修改,而抽象方法必须被子类实现,和final不允许修改就冲突了;
代码举例:
需求:
公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
分析:
在这个问题领域中,通过名词提炼法:
程序员:
属性:姓名,工号,薪水。
行为:工作。
经理:
属性:姓名,工号,薪水,奖金。
行为:工作。

程序员和经理不存在着直接继承关系,但是,程序员和经理却具有共性内容,可以进行抽取,因为他们都是公司的雇员,可以将程序员和经理进行抽取,建立体系。




接口
概述:
1.      接口的出现将“多继承”通过另一种形式体现出来,即“多实现”;
2.      接口的成员变量都是静态常量,有默认修饰符:public static final;
3.      成员变量: 只能是常量,并且是静态公共的默认修饰符为:public static fina;
4.      构造方法:接口没有构造方法,因为没有任何一个类能来访问接口的构造方法;
5.      成员方法: 只能是抽象的方法(因为是抽象的,所以也不能和static共存)默认修饰符为 : public abstract;
代码举例:


接口和抽象类的特点和区别
特点:
         接口:系统拓展的功能,likea 的关系
                   (1)成员变量: 只能是常量,并且是静态公共的默认修饰符为: public static final
                   (2)构造方法:接口没有构造方法,因为没有任何一个类能来访问接口的构造方法;
                   (3)成员方法: 只能是抽象的方法(因为是抽象的,所以也不能和static共存)默认修饰符为 :public abstract

         抽象类:系统的共性 is a 的关系   
                     (1)成员变量:可以是抽象的也可以使非抽象的
                     (2)构造方法:有构造方法,为了让子类来访问进行初始化
                     (3)成员方法:可以有抽象方法,也可也没有抽象方法
区别:
a)        抽象类可以有构造方法,接口不能有构造方法;
b)        抽象类可以有普通成员变量,接口中没有普通成员变量;
c)        抽象类中可以包含非抽象的普通方法,接口中所有方法必须都是抽象的,不能有非抽象的普通方法;
d)        抽象类中的抽象方法的访问类型可以是public,protected,但是接口中的抽象方法只能是public类型的,并且默认是public abstruct类型;
e)        抽象类中可以包含静态方法,接口中不能包含静态方法;
f)         抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但是接口中定义的变量只能是;
g)        public  static final类型,并且默认是public static final;
h)        类只能单继承,而接口可以多继承;


上篇连接:【长沙校区】助你成功!【Java基础笔记】面相对象上篇http://bbs.itheima.com/thread-275365-1-1.html(出处: 黑马程序员IT技术论坛)

10 个回复

正序浏览
赞一个....
回复 使用道具 举报
不错.....
回复 使用道具 举报
博哥6666666666666666666666666
回复 使用道具 举报
收藏收藏 ...明天就要上这课了
回复 使用道具 举报
正在学面向对象 收藏了
回复 使用道具 举报
提前预习啦!!
回复 使用道具 举报
博哥顶起    写的好详细啊   博哥万岁
回复 使用道具 举报
收啦~
回复 使用道具 举报
好帖,学习收藏了。。。。
回复 使用道具 举报
已收藏 慢慢看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马