一、类的概念:

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

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、接口不能够继承普通类和抽象类,但是可以继承接口,实现接口必须实现接口中所有的方法,包括继承过来的接口中的方法

Java的三大特性:封装、继承、多态的更多相关文章

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

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

  2. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  3. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  4. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

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

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

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

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

  7. Java 浅析三大特性之一继承

    上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...

  8. Java的三大特性之继承

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

  9. java提高篇(二)-----理解java的三大特性之继承

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

  10. java提高篇(二)-----理解java的三大特性之继承

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

随机推荐

  1. JAVA引用的种类

    最近在进行Java项目开发的时候,由于业务的原因,有时候new的对象会比较多,这个时候我总是有一个疑惑?那就是JVM在何时决定回收一个Java对象所占据的内存?这个问题其实对整个web系统来说是一个比 ...

  2. Actor模型---SwiftActors

    actor是一个无线程区别的内存访问对象:actor背后有线程支持:actor的事件处理依赖与这个线程(队列.池). actor是一种面向对象的线程(池)模型,强调对事件的响应:在iOS中相当于一种通 ...

  3. BZOJ4735:你的生命已如风中残烛(组合数学)

    Description 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习.但是今天六花酱不想做数学题,于是他们开始打牌. 现在他们手上有m张不同的牌,牌有两种:普通牌和功能牌.功能牌一 ...

  4. php header函数导出excel表格

    推荐一个除了用PHPExcel导出表格之外的另外一种比较简单不需要引入类文件的表格导入方法——header()导出excel表格. 导出表格的步骤封装成了方法,以便于重复使用,代码如下: /** * ...

  5. stl vector、红黑树、set、multiset、map、multimap、迭代器失效、哈希表(hash_table)、hashset、hashmap、unordered_map、list

    stl:即标准模板库,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法 六大组件: 容器.迭代器.算法.仿函数.空间配置器.迭代适配器 迭代器:迭代器(iterator)是一种抽象的设计 ...

  6. redis主从搭建

    两台服务器 127.0.0.101 A 主服务器 127.0.0.108 B 从服务器 从服务器设置 1.修改redis.conf 依次修改daemonize no改为daemonize yes  默 ...

  7. Django进阶(2)

    1.在D盘创建mysite工程项目:  django-admin startproject mysite manage.py ----- Django项目里面的工具,通过它可以调用django she ...

  8. 使用XMing+putty运行linux图形界面程序

    起因接下去的工作要作一些数值模拟,于是到师兄的工作站上开了个帐号.工作站运行的是RHEL4,要说远程SSH,就算是FTerm也足够胜任,不过,因为我要用的查看计算结果的软件需要使用图形界面,这一点就比 ...

  9. 百度谷歌雅虎三大搜索引擎比较和如何配置谷歌访问助手访问Google搜索服务

    引言: 由于近期网上盛传”百度搜索引擎已死“的消息,引发个人对于搜索引擎的思考.百度作为最大的中文搜索引擎,确实有着很大声誉,再加上本地化的优势,正成为国人们的首选,但是作为一名技术开发人员,使用搜索 ...

  10. Exp7

    实验内容 简单应用SET工具建立冒名网站 kali IP: 192.168.1.160 (原198) win7 IP: 192.168.1.199 1.开启本机Apache服务 (1)查看80端口是否 ...