面向过程和面向对象、面向对象的三大特性(继承、封装、多态)

面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。(相辅相成)

  1. 都是解决问题的思维方式,都是代码组织的方式
  2. 解决简单问题可以使用面向过程
  3. 解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程

面向过程:适合简单任务,不需要过多协作的事务(一步一步完成)

面向对象:适合复杂问题,需要大量合作

对象的发展过程:数据无管理时代——数组管理(企业部门制)——对象(企业项目制)

类:属性(成员变量field)+方法

面向对象的三大特征:继承、封装、多态

继承使用要点;

1、接口可以多继承,类只能单继承(只有一个父类)
2、可以得到父亲的全部属性和方法(除了父亲的构造方法),但不见得可以直接访问(比如,父亲私有的属性和方法)
3、如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object(可以右击点击Diagrams查看类的继承层次结构或者Ctrl+h

package cn.sxt.oo;

public class TestExtends {
    public static void main(String[] args){
        Student stu = new Student("高小七","挖掘机");
        stu.rest();
        stu.study();
        Student stu2 = new Student("高小八","计算机");
        stu2.study();
        System.out.println(stu2 instanceof Person);
        }
}
class Person extends Object{
    String name;
    int height;
    public void rest(){
        System.out.println("休息一会!");
    }

}
class Student extends Person {
    String major;

    public void study() {
        System.out.println("学习Java");
    }


    public Student(String name, String major) {
        this.name = name;
        this.major = major;
        this.height = height;
    }
}

instanceof 用于判断左边的对象是不是从属于右边的类
封装

  1. private表示私有,只有自己类能访问
  2. default表示没有修饰符,只有同一个包的类能访问
  3. protected表示可以被同一个包的类以及其他包的子类访问
  4. public表示可以被该项目的所有包中的所有类访问
package cn.sun.oo;

/**
 * 测试封装
 *
 */
public class TestEncapsulation {
    public static void main(String[] args){
        Human h = new Human();
        h.sayAge();
        //h.age = 18;
        h.name = "高淇";
        h.height = 180;
    }


}

class Boy extends Human{
    void sayHello(){
        System.out.println(name);

    }
}
package cn.sun.oo;

public class Human{
    private int age;
    String name;//可以被本包下面的类访问
    protected int height;
    public void sayAge(){
        System.out.println(age);
    }
}
package cn.sxt.oo;
import cn.sun.oo.Human;

public class TestEncapsulation2 {
    public static void main(String[] args){
        Human h = new Human();
        //h.age = 13;
        //h.name = "高淇";  //name 为default属性,不能被不同包访问
        h.sayAge();
    }

}
class Girl extends Human{
    void sayGood(){
        System.out.println(height);
    }
}

 封装的使用细节

  1. 一般使用private访问权限
  2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!!!)
  3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰

JavaBean的封装(没有复杂关系的简单的类)

属性私有private,属性的方法(提供get/set方法)公开public,没有其他复杂的方法。

package cn.sun.oo;

/**
 * 仍然测试封装
 */
public class Person4 {
    private int id;
    private String name;
    private int age;
    private boolean man;

    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        if(age>=1&&age<=130) {
            this.age = age;
        }else{
            System.out.println("请输入正确年龄!!");
        }
    }

}
package cn.sun.oo;

/**
 * 测试封装
 *
 */
public class TestEncapsulation {
    public static void main(String[] args){
        Human h = new Human();
        //h.sayAge();
        //h.age = 18;
        h.name = "高淇";
        h.height = 180;


        Person4 p4 = new Person4();
        //p4.age = 14;
        p4.setAge(-10);


    }


}

多态的要点

  1. 多态是方法的多态,不是属性的多态(多态与属性无关)
  2. 多态存在要有三个必要条件:继承,方法重写,父类引用指向子类对象
  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了
package cn.sun.oo;
/*
测试多态
 */

public class TestPolym {
    public static void main(String[] args) {
        Animal a = new Animal();
        animalCry(a);
        Dog b = new Dog();
        animalCry(b);
        Cat c = new Cat();
        animalCry(c);


    }

    static void animalCry(Animal a) {
        a.shout();
    }
}
class Animal{
    public void shout(){
        System.out.println("叫了一声");
    }
}
class Dog extends Animal{
    public void shout(){
        System.out.println("汪汪汪");
    }
}
class Cat extends Animal{
    public void shout(){
        System.out.println("喵喵喵");
    }
}

对象的转型

向上转型:子类可以自动转为父类(自动类型转型)

向下转型:父类转为子类(手动强制转型)

package cn.sun.oo;
/*
测试多态
 */

public class TestPolym {
    public static void main(String[] args) {
        /*Animal a = new Animal();
        animalCry(a);
        Dog b = new Dog();
        animalCry(b);
        Cat c = new Cat();
        animalCry(c);

         */
        Animal d = new Dog();
        Animal c = new Cat();
        Dog d2 = (Dog)d;
        d2.seeDoor();
      /*  Dog d3 = (Dog)c;
        d3.seeDoor();
        //猫不能强制转为狗,编译会通过,但运行时会报错
       */


    }

    static void animalCry(Animal a) {
        a.shout();
    }
}
class Animal{
    public void shout(){
        System.out.println("叫了一声");
    }
}
class Dog extends Animal{
    public void shout(){
        System.out.println("汪汪汪");
    }
    public void seeDoor(){
        System.out.println("看门");
    }
}
class Cat extends Animal{
    public void shout(){
        System.out.println("喵喵喵");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java是一种面向对象的编程语言,它支持封装继承和多特性封装是指将数据和方法封装在一个类中,以保护数据的安全性和完整性。继承是指子类可以继承父类的属性和方法,从而实现代码的复用和扩展。多是指同一种方法可以在不同的对象上产生不同的行为,提高了代码的灵活性和可扩展性。这些特性使得Java成为一种强大的面向对象编程语言,被广泛应用于各种领域。 ### 回答2: Java 是一门面向对象的编程语言,其三大特性分别为封装继承和多封装是指将数据和行为绑定到一个单元中的过程,即将相关数据和方法限制在一个类内部,并且隐藏了实现细节,不允许外部直接访问。这种保护数据的方式可以有效地防止数据被意外修改,提高了代码的可靠性和安全性。 继承是一种将现有类的属性和方法引入到新的类中重用的方式。通过继承,子类可以继承父类的属性和方法,从而减少代码的重复编写。此外,继承还可以实现代码的扩展和复用,增强代码的可维护性。 多是一种同一个方法或操作可以在不同的对象上产生不同的结果的特性。多实现了代码的灵活性和可扩展性,使得程序更加易于扩展和维护。Java 中的多性主要通过方法的重载和重写实现,在这两种方式下,多性可以产生不同的行为。 在 Java 中,面向对象编程是一种重要的程序设计方案,封装继承和多都是实现面向对象编程的关键部分。封装提供了数据保护的功能,继承实现代码的复用和扩展,多通过产生不同的行为增强程序的灵活性和可扩展性。程序员应该深入了解这三个概念的实现方式,并在编写代码时充分利用这三个特性,从而提高代码的可维护性和代码的质量。 ### 回答3: Java是一门面向对象编程语言,在面向对象编程中,有三个核心概念:封装继承和多封装指的是将对象的属性和方法封装在一个独立的单元中,并且对外提供公共接口来访问这些属性和方法。这样可以使得对象的数据和操作得到保护,防止外界的误操作和恶意修改。在Java中,封装可以通过访问修饰符来实现,例如public、protected、private等关键字。 继承是指通过已有的类创建新的类,新的类继承了已有类的属性和方法,并且可以重写或扩展这些属性和方法。这样可以使代码复用性更高,同时也可以减少冗余代码。在Java中,可以使用extends关键字来实现继承。 多是指同一个方法在不同的对象中有不同的表现形式。在Java中,多可以通过方法的重写和重载来实现。方法的重写指的是子类重写父类中已有的方法,使得该方法在不同的子类对象中表现出不同的行为;方法的重载指的是在同一个类中定义多个同名但参数类型或参数个数不同的方法,使得该方法可以根据不同的参数类型和参数个数调用不同的方法。 在开发中,Java面向对象特性可以提高代码的可维护性、可扩展性和代码的复用性,使得程序的设计更加模块化和可读性更加高。同时,Java也具有平台无关性和其它编程语言无法比拟的优势,所以在软件开发领域中得到了广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值