一、类的概念:

类一般包括两个部分:属性(成员变量)和方法(成员方法)
方法组成部分:修饰符(可选) 返回值类型(必须) 方法名(必须)参数列表(可选)

package com.classTest.project;public class ClassTest {    //成员变量String name;int age;    //成员方法public void count(){this.age+=1;}}

二、定义方法的几点说明

1、返回值类型:基本数据类型(整型(int)、浮点型(float)、字符串类型(String)、字符型(char)等)、引用数据类型(数组、类、接口)

例子:

①基本数据类型作为返回值类型:

⑴整型(int)

⑵浮点型(float)

⑶字符串类型(String)

⑷字符型(char)

package com.returntype.project;public class BasicData {public static void main(String[] args) {BDMethod BdMethod=new BDMethod();int getInt=BdMethod.getInt();System.out.println("返回值为整型的返回的内容:"+getInt);float getFloat=BdMethod.getFloat();System.out.println("返回值为浮点型的返回的内容:"+getFloat);String getString=BdMethod.getString();System.out.println("返回值为字符串型的返回的内容:"+getString);char getChar=BdMethod.getChar();System.out.println("返回值为字符的返回的内容:"+getChar);}}

package com.returntype.project;public class BDMethod {public int getInt(){return  2;}public float getFloat(){return 3.2f;}public String getString(){return "返回值String类型";}public char getChar(){return 'a';}
}

②引用数据类型作为放回值类型:

⑴数组

⑵类

⑶接口

2、修饰符:访问级别(public、private、protect、default)

  同一类 同一包 不同包的子类 不同包的非子类
public
protect  
default    
private      

3、参数列表:

实参:它是指方法在被调用时,参数列表所传入的参数

基本数据类型为实参时,直接以变量的形式传入

   引用数据类型为实参时,数组是把数组名传入,类是把对象名传入,接口一般不做为实参传入

例子:

sum(a,b);//这里的a和b是实参

形参:它是指方法在定义时,参数列表所写的参数

基本数据类型作为形参时,直接以变量的形式传入

引用数据类型作为形参时,以数组声明的方式或者以类声明引用变量的方式

例子:

void sum(int a,int b);//这里的a和b是形参

4、方法的注意事项:

1、方法中不能定义方法

//错误例子
public void sum(){void change();}

2、实参不能带数据类型

//错误例子
sum(String name,int age);

3、实参与形参要为同一类型(自动类型转换除外)
例如:void sum(String name,int age)
sum(username,userage)//name的类型必须是String,userage的类型必须是int

4、传参:
1、String类型变量,在没有给他赋值时,默认值null, int类型的变量默认为0,double类型的变量默认为0.0

2、局部变量和成员变量
    局部变量(在方法中定义)
    成员变量(在类中定义)

三、构成方法:

1、为什么要用构造方法:
                               构造方法相当于是提供一个场所,为创建一个对象而提供的一个场所。

2、构造方法的注意事项:

  ①构造方法的名字跟类名一样

  ②无返回类型

  ③如果在类中没有定义构造方法,系统默认会创造一个无参数的构造方法,只要在类中定义自己的构造方法,系统便不会再创造参数的构造方法

3、带参数的构造方法:可以为成员变量初始化

getter and setter 的作用:

(1)安全性,里面参数不能随意修改;

(2)类提供给外面的接口;

4、方法的重载:
  定义:在同一个类中,方法名相同,参数的个数或者类型不同
  判断方法是不是重载的依据:

①方法是否在同一个类中

②方法名是否相同

③方法的参数个数或者类型是否不同

5、修改属性(成员变量的可见性):

①通过访问修饰符设置 访问修饰符;public private protected default
                                             ②public修饰的成员变量和方法:类、外部可以直接访问
                                             ③private修饰的成员变量和方法:类里面是可以直接访问,但是外部不可访问

6、static关键字的使用:
    由static关键字修饰的成员变量和方法,他们属于类本身,他们分别叫静态成员变量或者静态成员方法
    静态成员变量定义语法:
                                  修饰符 static 关键字 类型 变量名
                                  比如:public static int i=0;
    如何使用:
                 通常采用类名+"."调用或者不推荐采用对象名+"."调用
                 语法:类名.静态成员变量 或者 类名.静态成员方法

静态成员方法语法:
                             修饰符static 返回类型 方法名(参数列表){
                               //方法体
                             }
   引用静态成员如何使用:
               通常采用类名+"."调用或者不推荐采用对象名+"."调用
               语法:类名.静态变量 或者 类名.静态成员方法

注意事项:
              ①静态成员方法中,只能调用静态成员方法和静态变量,且静态变量不能用this引用

②不是有static关键字的修饰方法,称作为对象方法

③在对象方法中,可以用静态成员方法

package com.classTest.project;public class ClassTest {int age;//不是由static关键字修饰的成员变量或成员方法,它们只属于对象才可以引用static int num;//有static关键字修饰的成员方法或者成员变量,它们是属于类本身,不依赖于对象而存在,但是对象可以去引用它们,但是不推荐通过对象去引用,他们的引用方式:类名.成员变量(成员方法)public void count(){
//两种的表达形式都可以this.age+=1;age+=1;}public void count1(){//普通方法即可调用普通方法和调用静态方法,也可以调用成员变量和静态变量this.age+=1;num+=1;count();num1();}public static void num1(){num+=1;//调用的变量必须是静态变量,可是不能用this引出来//      this.num+=1;//出错,this当前类的对象,解决成员变量和局部变量同名冲突,this不能使用在由static关键字修饰的成员方法中使用num2();//调用的方法必须是静态方法
//      count();//会报错,因为该方法不是静态方法
    }public static void num2(){}}

package com.classTest.project;class Test{public static void main(String[] args) {//引用类中的静态方法和静态变量,通常采用类名+"."调用,语法:类名.静态变量 或者 类名.静态成员方法ClassTest.num+=1;ClassTest.num1();ClassTest.num2();}}

7、构造方法的引用:

package com.classTest.project;public class ClassTest {String name;int hobby;int weight;public ClassTest(int weight){this.weight=weight;}public ClassTest(String name,int hobby,int weight){this(weight);//通过this去引用其他重载的构造方法,该语句必须放在第一行this.name=name;this.hobby=hobby;
//      this(weight);//报错
        }
}

包的作用:便于管理我们的代码

三、继承、封装、多态

1、继承(extends):提高代码的复用性

封装:使代码模块化,提高安全性,隐藏类的类部细节

 包:便于管理我们的代码

   方法的重写(向上转型)

  多态的应用:

                 向上转型和向下转型

   Java解决多继承问题用接口

2、方法分成类方法和对象方法,以static来区别,如果以静态关键字来修饰的方法是类方法,否则为对象方法

方法的重写:

①重写方法和被重写方法必须具有相同的方法名和参数列表
                    ②重写方法的返回值类型必须和被重写方法的返回值类型相同了或者是其子类
                    ③重写方法的不能缩小被重写方法的访问权限

3、super的使用:

(1)super.print();子类里面调用父类的方法及属性等,用super,可是在父类中不能引用super的方法及属性等
                    (2)super关键字和this关键字的作用类似,都是将被屏蔽了的成员变量、成员方法变为可见可用。
                    (3)super用在子类中,访问直接父类中的被屏蔽的内容,进一步提高代码的重要性和灵活性。super关键字不仅可以访问父类的构造方法,还可以访问父类的成员,包括父类的属性、一般方法等,无法通过super访问private

                                条件                顺序
子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法 默认先调用父类的无参构造方法
子类中的构造方法中通过super显示调用父类的有参构造方法 将执行父类相应的构造方法,而不执行父类无参构造方法
子类构造方法中通过this显示调用吱声的其他构造方法 在相应的构造方法中应用以上两条规则

4、继承的总结:
                       (1)子类必须通过关键字extends来实现继承
                       (2)子类可以重写父类的方法
                       (3)在子类中可以通过super关键字去访问父类的成员变量和成员方法,但是不能调用父类中private的属性和方法。
                           格式:super.方法名()或者super.属性,但是引用构造方法的格式:super()(无参的构造方法)、super(参数)(有参构造方法)
                       (4)继承中构造方法调用的顺序:先调用父类的构造方法,再调用自身的构造方法,如果有多级继承的关系,也遵循上述顺序原则

5、Object类是所有类的父类和被子类经常重写的方法

方法 说明
toString() 返回当前对象本身的有关信息,按字符串对象返回
equals() 比较两个对象是否是同一个对象,是则返回true
hashCode() 返回该对象的哈希代码值
getClass() 获取当前对象所属的类信息,返回Class对象

6、形参在方法中如何表现出来:
                                        按基本数据类型、数组、类类型声明形式(比如:int i、int[]a、Dog dog)

7、多态

多态解决代码冗余问题,提高程序的扩展性,以及提高代码的复用性
           多态:同一个引用类型,使用不同的实例而执行不同操作。方法重写是实现多态的基础

多态的总结:
                          (1)同一个引用类型,使用不同的实例(对象)而执行不同的操作,是具体根据实例(对象)来确定调用相应的方法
                          (2)多态的条件:
                                               a 继承是多态的基础,继承是必要条件
                                               b 方法重写
                                               c 父类引用指向子类对象
                          (3)多态的好处:提高程序的可扩性以及维护性,实际应用中,新增一个子类就相当于一个新的需求,测试类相当于业务的逻辑实现

(4)没有使用多态前的解决方案:
                                                                  a 新建一个子类
                                                                  b 在主人类中增加一个喂新增子类的方法
                                                                  c 在测试类中去实例化(创建)子类的对象以及主人类实例化(创建)对象
                              该解决方案的弊端:每新增一个子类,就得去主人类中增加一个方法,而且该方法中代码是相同的,这样代码就显得冗余。
                              使用多态的解决方案:
                                                           a 新建一个子类
                                                           b 在测试类中去实例化(创建)子类的对象以及主人类实例化(创建)对象

如果子类中没有给方法(如:pet.eat()),就会主动父类的方法eat()方法

8、向上转型和向下转型

(1)向上转型:子类向父类靠,如Pet pet=new Dog();将无法调用子类特有的方法
       向上转型:

实现步骤:
                                  第一步:实例化子类对象

格式:Dog dog=new Dog();
                                  第二步:父类的引用变量指向子类对象(体现向上转型)

格式:Pet pet=dog;
                                  第三步:实例化第三方(主人类)

格式:Master master=new Master();
                                  第四步:父类的引用变量作为第三方(主人类)的方法实参进行传递

格式:master.playToPet(pet);

(2)向下转型:父类类型转换为子类类型,如:Dog dog=(Dog)pet;
       格式:子类的类类型 子类的引用变量 = (父类)

向下转型:

实现步骤:
                                   第一步:实例化子类对象

格式:Dog dog=new Dog();
                                   第二步:父类的引用变量指向子类对象

格式:Pet pet=dog;
                                   第三步:父类的引用变量强制转换成子类引用变量

格式:Dog dog1=(Dog)pet;
                                   第四步:实例化第三方(主人类)

格式:Master master=new Master();
                                   第五步:子类的引用变量成为第三方(主人类)的方法实参进行传递

格式:master.playToPet(dog1);
                                   第六步:修改第三方(主人类)中相应方法 语法:结合instanceof运算符来判断是否真正子类类型,才可以调用相应的子类特有的方法
                                   格式: if(pet instanceof Dog){ //形参的引用变量 instanceof 子类相应的子类类型
                                             ((Dog)pet).play();
                                           }
       向下转型的最终目的:即实现多态(主要体现在第三方类中),又要让子类引用变量去引用子类中所特有的方法

(3)instanceof判断是否转型成功

(4)抽象方法与普通方法的区别
                                           a、普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有)
                                           b、抽象方法要用abstract修饰
                                           c、抽象方法必须存于抽象类中

抽象方法:有关键字abstract修饰的方法,它没有方法体。

注意事项:
                     a、抽象方法只能存在抽象类中
                     b、抽象方法必须在子类中重写

抽象类:有关键字abstract修饰的类,称作为抽象类

注意事项:
                      a、抽象类不能被实例化不能跟new 一起使用 error:new Car()
                      b、抽象类中可以有属性(成员变量)、普通方法以及抽象方法的组成

c、抽象类的抽象方法没有方法体

d、抽象类的抽象方法必须在子类中实现

(5)接口是为了实现方法里面的多继承问题,一般用于解决java多继承问题
       接口:
               a、定义:接口是通过interface关键字直接定义一个接口,不需要关键字class
               b、接口中的方法一定是抽象方法,但是该抽象方法可以不加abstract关键字
               c、接口中的属性一定要初始化,但是接口一般用于定义静态常量 格式:public final static int BRIDCOUNT=5;
               d、实现接口必须实现接口中所有的方法
               e、接口不能够实例化(即不能跟new关键字一起使用),但是可以用来声明引用变量 语法:接口名 引用变量
               f、接口不能够继承普通类和抽象类,但是可以继承接口,实现接口必须实现接口中所有的方法,包括继承过来的接口中的方法

转载于:https://www.cnblogs.com/xuegu/p/5740627.html

Java的三大特性:封装、继承、多态相关推荐

  1. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  2. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

  3. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  4. Java面向对象三大特性之继承多态的预习笔记,are you ready? 面对疾风吧!

    文章目录 继承(extends) super关键字 方法重写 instanceof关键字 abstract关键字 接口(interface) 多态 继承(extends) AextendsB A继承了 ...

  5. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  6. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  7. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

  8. Java的三大特性之继承

    此处我会分为这几个部分来理解继承是怎么样的: 1.区分封装.继承和多态 2.区分限定词的范围 3.区分隐藏.覆盖.重载 4.继承的理解 5.一道面试题的原型 --------------------- ...

  9. Java基础知识之封装+继承+多态详解

    前言 这篇博客是基于Java类和对象的基础之上的相关知识点.因为特别重要且语法规则较多,所以想单独总结方便之后复习. 本篇博客涉及知识点思维导图: 目录 1.封装 2.继承 3.多态 1.封装 生活中 ...

  10. java三大特性 继承_java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

最新文章

  1. C# 笔记 获取程序当前目录
  2. 9个用于构建容错系统的开源工具
  3. elementui table某一列是否显示_Vue项目引进ElementUI组件的方法
  4. Breeze:抢先体验Kubernetes 1.13.0高可用图形化部署
  5. sscanf 连续相同编辑符_基于单调栈的滑动窗口法求解“和至少为 K 的最短连续子数组”...
  6. bool查询原理 es_es6.2.4,使用bool查询查出的结果,SearchResponse的Hits[]总是比t..._慕课猿问...
  7. 工具的使用 —— sublime
  8. 将JSON格式的字符串转换成List集合引入gson 的jar包
  9. 2010年imac从移动硬盘启动Win10
  10. UVA-12661 Funny Car Racing (dijkstra)
  11. java 认证 种类_java认证:JavaSocket编程的一个秘密类
  12. CRT、CER、PEM、DER编码、JKS、KeyStore等格式证书说明及转换
  13. 第三十一章 SQL命令 DROP DATABASE
  14. linux中man 2与man 3区别
  15. 儿童成长曲线 (WHO标准)
  16. 轻松在线绘制进化树和增加热图注释
  17. 用 Python 绘制 XMind 思维导图
  18. 字节跳动2020秋招笔试题
  19. cmd html 查找汉子字,cmd搜索字符串加换行 在cmd(命令提示符)中怎样换行
  20. The Geodetic Set Problem - POJ 1612 Floyd求最短路径所有点集

热门文章

  1. 【误区】技术部经理vs技术经理 —— 一字之差谬以千里
  2. 免费硬件、万元奖池、百度内推,AI达人创造营邀你出战!
  3. 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
  4. Fellow观点:AI框架下的医疗影像教学
  5. ICCV 2019 Oral 端到端任意形状场景文字识别
  6. 华科新开源文本识别算法:ASTER与DeepLesion数据集百度云下载
  7. java rabbitmq 并发_RabbitMQ消息中间件 高级篇二 高并发情况下保障消息投递可靠性...
  8. 人生苦短,Python值得 这些Pandas隐藏小技巧你知道吗?
  9. 收藏 | 可解释机器学习发展和常见方法!
  10. 阿里人工智能实验室招聘计算机视觉算法专家-交互图像方向