七、JAVA三大特性



面向对象三大特性  封装,继承和多态

封装 

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面(方法)。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术。

封装是分为两部分:属性的封装,方法的封装。封装起来就是为了对外隐藏。

类本身和方法本身就是一种封装,体现的是装配的含义。

在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

属性的封装通过private,同时还要提供可以访问该私有属性的方法。

 

这个方法就要写在类里面。

 

Java里面对私有属性提供了两个方法:setter和getter,而且这两个方法必须是public。

 

 

package yantai;

import java.util.Scanner;

public class Account
{

private double balance=100;

private String
cardNo;

public double getBalance()
{

///

Scanner
s=new Scanner(System.in);

System.out.println("请输入密码");

String
passwd =
s.next();

if(!passwd.equals("ok")){

System.out.println("输入密码不正确....");

throw new RuntimeException();

}

return balance;

}

public void setBalance(double balance)
{

this.balance =
balance;

}

public String
getCardNo() {

return cardNo;

}

public void setCardNo(String
cardNo) {

this.cardNo =
cardNo;

}

/**

*
存款

*/

public void deposit(int money){

this.balance=this.balance+money;

System.out.println("存了:"+money);

System.out.println("目前卡余额:"+this.balance);

}

/**

*
取款

*/

public  void withdraw(int money){

this.balance=this.balance-money;

System.out.println("取了:"+money);

System.out.println("目前卡余额:"+this.balance);

}

public static void main(String[]
args) {

//先创建一个对象,对象名字叫小明

Account
a =
new Account();

System.out.println(a.balance+"-----------");

a.deposit(100);

a.withdraw(200);

}

}

 

 

 

 

 

继承

使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,同时也拥有了父类的功能,使得复用以前的代码非常容易,减少重复代码的编写。能够大大缩短开发周期

父类:(超类)被继承

子类:(派生类)继承父类,并有自己新的特性。

 

什么时候适合设计成类之间的继承关系?

  1. 为了重复利用代码
  2. 这两个类之间有一种is a关系

    子类对象构建过程:

    定义子类对象时:

    分配空间 (父类对象空间,子类对象空间)

    递归构造父类对象

    初始化属性

    调用构造方法:先调用父类的构造方法再调用子类的构造方法

    子类可以把父类的什么修饰符修饰的属性和方法继承过来。Public,protected,default(父类和子类在同一个包)。

    访问修饰符

    一共是四种:public ,protected—为了继承,default,private

    子类:派生类

    父类:超类

     

    方法的重载(Overload)

    涉及到一个类,要求这些方法的方法名一样,但是参数不同。

    方法都在同一个类里面。

    方法的覆盖(Override)

    前提是需要有继承关系,涉及到两个类,父类和子类。

    方法重写:

  1. 子类重新定义父类的同名方法,主要是重写定义方法体。
  2. 父类是公有的修饰符,子类一定是公有的。父类如果是protected,子类可以是protected,或者public

    子类比父类更开放。

    3.子类重写的方法的返回值类型可以是跟父类一样,或者是父类返回值类型的子类。

    super关键字(this关键字
     ---当前对象)

     

    可以通过super.属性名调用从父类继承过来的属性

    通过super.方法名调用父类定义的方法

    通过super()调用父类的构造方法。

    定义子类对象,调用父类的构造方法的时候,一定子类构造方法的第一行,并且不一定就是调用空参数的父类的构造方法,只要是调用父类随便一个构造方法都可以,但是,只能调用一次。

     

    public Dog(){

    super(30);//首先调用父类的无参的构造方法

    System.out.println();

    }

     

    Java继承的限制:

    1.继承只能是单继承,只能有一个直接父类。 只能有一个爹

    2.可以多层继承,父类有父类 爷爷

    3.私有的属性和方法不能被继承  私有就是为了自己类可用,子类当然不能用

     

    课堂代码:

    public class Animal {

    public Animal(int age,
    char sex)
    {

    this.age =
    age;

    this.sex =
    sex;

    }

    public Animal(){

    System.out.println("---------Animal
    Constructor-----------");

    }

    protected  int age=0;

    private char sex;

    public int getAge()
    {

    return age;

    }

    public void setAge(int age)
    {

    this.age =
    age;

    }

    public char getSex()
    {

    return sex;

    }

    public void setSex(char sex)
    {

    this.sex =
    sex;

    }

    /**

    *
    吃饭

    */

    public  void eat(){

    System.out.println("I
    can eat");

    }

    /**

    *
    睡觉

    */

    protected   void sleep(){

    System.out.println("I
    can sleep 8 hours");

    }

    /**

    *
    发出叫声

    */

    public  void call(){

    System.out.println("call.......................");

    }

    public Animal getAnimalInstance(){

    return new Animal();

    }

    }

     

     

    package yantai;

    public class Dog
    extends Animal{

    int age=1;

    @Override

    public Dog getAnimalInstance() {

    //
    TODO Auto-generated method stub

    return null;

    }

    @Override

    public  void sleep()
    {

    //
    TODO Auto-generated method stub

    System.out.println("8
    hours");

    }

    public Dog(){

    super(12,‘f‘);

    System.out.println("------Dog
    constructor---------");

    }

    /**

    *
    看门

    */

    public void watchDoor(){

    System.out.println("I
    can watchDoor");

    }

    public void print(){

    System.out.println("the
    age is :"+super.age);

    }

    }

     

多态 

多态需要具备什么前提?

  1. 类之间有继承关系
  2. 多个子类需要对父类的某个方法进行重写。

    3.一个父类的引用指向一个子类的对象。

    Animal a =  new Dog();

    Animal a =  new Cat();

    Animal a =  new Pig();

    多个子类共同继承父类,定义时候用父类变量分别指向不同子类对象

    注意:

  1. 父类的引用指向子类的对象,但是父类的引用只能访问到父类定义的方法声明。
  2. 他访问父类当中被重写的方法,最终是访问子类的方法。

    多态总结:一个变量能做什么要由类型决定,一个变量怎么做由对象决定。

     

    深度分析: invokespecial选择方法基于引用的类型,而不是对象所属的类。但invokevirtual则选择当前引用的对象

     

     

     

     

     

     

    课堂举例:动物发出叫声的多态----玩具

     

     

    package com;

    public class Animal {

    private int age;//年龄

    private char sex;//性别

    private String
    skin;//肤色

    private String
    type;//类型

    public Animal(){

    }

    /**

    *
    睡觉

    */

    protected void sleep(){

    System.out.println("-------------sleep
    8 hours---------------");

    }

    /**

    *
    吃饭

    */

    public void eat(){

    System.out.println("-------------eat
    something---------------");

    }

    /**

    *
    叫声

    */

    public void call(){

    System.out.println("-------------calling....---------------");

    }

    }

    class Dog
    extends Animal{

    public void call(){

    System.out.println("-------------wangwang....---------------");

    }

    }

    class Pig
    extends Animal{

    public void call(){

    System.out.println("-------------hengheng....---------------");

    }

    }

    class Cat
    extends Animal{

    public void call(){

    System.out.println("-------------miaomiao....---------------");

    }

    }

     

     

     

    Toy.java

     

    package com;

    public class Toy {

    public static void main(String[]
    args) {

    //
    TODO Auto-generated method stub

    Toy toy=new Toy();

    toy.pressButton(new Dog());

    toy.pressButton(new Cat());

    }

    public static void pressButton(Animal
    a){

    //根据信号来判断这是什么动物,然后发出声音

    a.call();

    }

    }

     

     

    台灯发光的问题。

    一盏台灯,换上不同颜色的灯泡会发出不同颜色的光。

时间: 2024-10-19 16:36:45

七、JAVA三大特性的相关文章

跟王老师学Java三大特性(一):案例 QuickHit:需求分析

项目案例:QuickHit:需求分析 主讲教师:王少华   QQ群号:483773664 学习目标 学会用面向对象思想来进行需求分析 一.需求 根据输入速率和正确率将玩家分为不同级别 级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高 规定时间内完成规定次数的输入,正确率达到规定要求,则升级 玩家最高级别为6级.初始级别一律为1级 用户错误输入一次,游戏结束 二.面向对象分析 (一) 发现类 玩家(Player)类 游戏(Game)类 级别(Level)类 (二)发现类的属性 1.玩家

java三大特性之封装

1.封装 封装概述:是指隐藏对象的属性和实现细节,仅仅对外提供公共访问方式. 好处: 隐藏实现细节,提供公共的访问方式 提高了代码的复用性 提高了安全性 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 2.private关键字 private关键字是一个权限修饰分,可以修饰成员变量和成员方法,被private修饰的成员变量或成员方法只能在本类中使用. private最常见的应用:1.把成员变量用private修饰 2.提供对应的setter和getter方法.

Java入门——深入理解Java三大特性

Java入门——深入理解Java三大特性 本Blog内容: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法(getter,setter),如果不想被外界方法,我们大可不必提供方法给外界访问. 封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码. 可以对成员变量进行更精确的控制.(在setter方法中进行实际意义的校验) 总结:控制属性访问权限,不是你想改就能改.容易修改属性类型.精确控制属性的取值范围. 继承 继承是使用已存在的类

java三大特性-----------------------多态

Java三大特性之多态 多态的定义:指允许不同类的对象对同一个消息做出响应,即同一消息可以根据发送对象的不同采用多种行为方式. 就我个人经历来说,对一个新人一开始就理解这个定义还是有一点难度的(可能是我比较蠢).我觉的还是用java的方式来理解可能会简单一点: 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决

跟王老师学Java三大特性(三):案例 QuickHit:确认输入并输出结果

案例 QuickHit:确认输入并输出结果 主讲教师:王少华   QQ群号:483773664 学习目标 完成Game类中的printResult方法的编写 一.需求说明 确认用户输入并输出结果 二.思路分析 确认玩家输入是否正确 如果输入不正确,则直接输出错误信息并退出程序 如果输入正确 如果超时,则直接输出错误信息并退出程序 如果不超时 计算玩家当前积分 计算 玩家已用的时间 输出当前玩家的级别.当前积分.已用时间: 判断用户是已经闯过最后一关并处理 三.参考代码 1 2 3 4 5 6 7

浅谈Java三大特性

Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装,即是隐藏一切可隐藏的东西,对外界只提供最简单的编程接口.比如,在一个类中,把数据和操作方法绑定起来,对数据的访问只能通过这些 get/set 方法(又称为接口)来实现. 为什么封装?比如,我是一个厨师,我有一本食谱,你今天想吃肉,让我帮忙露两手.具体加了多少盐,放了多少醋你不需要关心(隐藏具体实现

理解java三大特性之多态

---恢复内容开始--- 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承.,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间

三、java三大特性--多态

面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么? 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象

JAVA三大特性之三——多态

作为JAVA的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能想到的例子就是图形,图形是个很大的类,他包含三角形.矩形.圆.梯形.五边形等等,而他们都属于图形类,表现的形式各有特点,属性.方法都不同.所以,我所理解的第一点就是多态指的是子类相对于父类的不同表现形式(包括子类对父类方法的重写,这就是多态的一个重要体现). 另外一点,是我在<Thinking in