`
zccst
  • 浏览: 3318810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaSE之"面向对象"

阅读更多
注:要一直站在内存角度看问题。


面向对象与面向过程的区别:
面向对象封装细节,面向过程关注细节,例如开车去新疆。对比自己,以前是面向过程。


一、类概述
类,是抽象。对象是类的实例。

类的成员变量有默认值。
引用:一小块内存指向一大块内存。本质是指针。
String s = new String("HelloWorld");
new创建一块内存。s指向它。有两块内存。new的都在堆中。
s是对象的引用。引用存在于堆中。s是局部变量,本身存在于栈里。

class C{
  int i;
  int j;
  ..main..{
  C c1 = new C();
  C c2 = new C();
  }
}

c1,c2是对象的引用,简称对象。本质是局部变量,在栈中。引用堆中的对应对象。


构造方法
构造方法没有返回值。作用:new就是调用构造方法。
Person{
  int id;
  int age;
  Person(int _id, int _age){
    id = _id;
    age = _age;
  }
}

Person tom = new Person(1, 20);

栈内存:tom在栈内存,_id和_age也是局部变量,也在栈中。
(1)调用构造方法时传入1和20,此时栈内存里_id和_age的值分别变为1和20.
(2)new时,在堆中创建一个对象,并将1和20赋给id和age。
(3)方法调用结束后,栈空间消失,对象(堆中)留了下来。

不写时,使用默认构造方法:空构造方法。


局部变量:
1,基本类型;一块内存,在栈内存。
2,引用类型。两块内存,一块在栈内存,一块在堆内存。

方法调用
1,值传递。

例:
int date = 9;

void change(int i){
  i = 1234;
}

date是局部变量,在栈空间中占一块内存。
函数调用执行时,形参也占一块内存。(copy局部变量的)执行完释放。由于是值传递,并不修改局部变量的值。

2,引用传递。
Test test = new Test();
BirthDate d1 = new BirthDate(7, 7, 1970);
BirthDate d2 = new BirthDate(1, 1, 2000);
test.change2(d1);
test.change3(d2);


public void change2(BirthDate d){
  b = new BirthDate(2, 22, 2004);
}
public void change3(BirthDate d){
  b = setDay(22);
}

在栈内存中:d1,d2
堆内存中:两个对象。d1和d2分别指向他们。

方法调用change2时,在堆内存中生成临时引用变量 d,也指向堆内存中d1指向的对象。
执行b = new BirthDate(2, 22, 2004);后,b又指向堆内存中新开辟的一个对象。
执行完毕,b消失,指向的新对象被垃圾收集器回收。
原来d1指向的内容没有改变。


方法调用change3时,在堆内存中生成临时引用变量 d,也指向堆内存中d2指向的对象。
执行b = setDay(22);后,b修改了指向堆内存中原d2指向对象的值。
执行完毕,b消失,d2指向的内容已经改变。


通过对象调用方法。此时专属一个对象。
静态变量是全局。共享。


形参:
1,传值:复制一份,调完消失。
2,引用:复制一份,也指向对象。调完消失后,也修改了对象的值。



this
指向对象自身。

static
静态:即不属于任何对象,是全局变量。所有对象都可以使用。



二、继承和派生

继承
super()  调用父类构造方法


重载
1,方法重载
2,类 构造方法重载


重写


【类型转换】casting 父类引用指向子类对象
该引用,不能访问子类对象新增的成员(属性和方法)。
例子:
父类——动物Animal
子类——猫Cat,狗Dog
Animal a = new Animal();
a = new Dog();只能看到动物成员。不能看到狗新增加的成员。
想访问,得转型。 Dog d1 = (Dog) a; 此时可以看到狗特有的属性。
a instanceof Animal
if( a instanceof Cat){ Cat cat = (Cat) a; cat.new }
if( a instanceof Dog){ Dog dog = (Dog) a; dog.new }

向上转型(upcasting)子类对象当做基类的对象
向下转型(downcasting)基类的对象当做子类的对象


多态  也叫动态绑定,也叫迟绑定。面向对象 —— 精华,最核心的东西。
与区别是

class Lady{
  private String name;
  private Pet pet;
  Lady(String name, Pet pet){
    this.name = name;
    this.pet = pet;
  }
}
Pet { public void enjoy("叫声。。。")}
Cat { public void enjoy("猫叫声。。。")}  继承Pet
Dog { public void enjoy("狗叫声。。。")}  继承Pet

Cat c = new Cat("catName", "blue");
Dog d = new Dog("dogName", "black");

Lady l1 = new Lady("", c);
Lady l2 = new Lady("", d);
l1.enjoy();
l2.enjoy();
此例即为:动态绑定。
好处:可扩展性。
比类型转型中的instanceof更好用。

三个必要条件
1,有继承
2,有重写方法
3,父类引用指向子类对象
当调父类中被重写的方法时,动态绑定。
总结:说明动态时可以通过举例子的方式。四个对象。一个lady,三个动物。




抽象类
实现多态
其实基类不用实现。直接写成接口。

不能new,只能重写。



final
相当于c++中的Const
变量(普通变量,形参变量)、方法、类
如:String类。


接口
特殊的抽象类
变量:public static final int id = 0;//必须赋初值。
      克服C++多继承。static不属于任何一个对象。final不能修改。
方法:只能是public。

可以用来多继承



[接口:重要]
分享到:
评论

相关推荐

    5-JavaSE之面向对象编程-类与对象(上)1

    面向对象编程是Java的核心特性,它使得代码更加结构化、可维护性更强。在这个主题中,我们将探讨类与对象的概念,以及与它们相关的其他关键概念。 1. **类与对象**: 类是面向对象编程的基础,它是描述一组具有...

    JavaSE进阶 面向对象多态

    JavaSE 进阶 面向对象多态 在 JavaSE 中,面向对象多态是指同一个对象可以具有多种形态,例如一个人可以是老师、丈夫、父亲等。这种多态性是通过方法的重写和重载来实现的。 多态的形式有很多,例如: 1. 方法...

    JavaSE进阶 面向对象继承

    JavaSE进阶面向对象继承 继承是Java语言中的一种机制,允许一个类继承另一个类的特征和行为。继承的优点是可以提高代码的可重用性,减少代码冗余,提高开发效率。 1. 继承的定义:继承是指一个类继承另一个类的...

    6、JavaSE:面向对象.pdf

    封装是面向对象编程的特征之一,它将数据(属性)和操作数据的方法(行为)包裹在一起,形成一个独立的单元,外部只能通过接口与之交互,这称为信息隐藏,可以增强模块的独立性和安全性,便于维护。继承是面向对象...

    面向对象.xmind

    javase之面向对象编程 思维导图

    JAVASE做的ATM提款机项目 使用面向对象分层等思想 并使用了jdom

    面向对象编程是现代软件开发的核心理念之一,它将现实世界的问题转化为类和对象,通过封装、继承和多态等特性来组织代码。在这个ATM项目中,我们可以期待看到如“用户”、“账户”、“交易”等类的设计,它们各自...

    06_javaSE复习之面向对象准备阶段

    什么是面向对象、如何定义类、如何定义对象、成员变量、局部变量、静态变量、匿名对象、Math.randon()/this/static 代码块(局部代码块、构造代码块、静态代码块、同步代码块) 、java内存结构

    面向对象中代码(JAVASE)

    面向对象中代码(JAVASE)

    面向对象下代码(JAVASE)

    面向对象下代码(JAVASE)

    JavaSE进阶-01-面向对象.pdf

    在Java编程语言中,面向对象特性是其核心概念之一,本资料主要讲解了JavaSE进阶中的面向对象相关知识,包括final关键字、抽象类、接口、抽象类与接口的区别、Object类、package和import以及访问权限控制。...

    JavaSE面向对象.xmind

    javaee入门

    07_javase面向对象之继承

    关键字super/this的用法和区别;在继承中子类和父类构造方法的关系;方法重写;final关键字

    javaSE基础,面向对象-封装

    1 了解什么是面向过程 2 了解什么是面向对象 3 掌握类的定义和对象的创建 4 了解对象的内存图 5 掌握局部变量和成员变量的区别 6 掌握private 和this的使用 7 掌握构造方法的使用

    JavaSE_1_面向对象_3

    继承的基本概念,集成的基本限制,子类实例化,方法的覆写,修改之前的继承操作,super关键字,final关键字,抽象类,接口,多态性,instanceof关键字,抽象类的实际应用,接口的实际应用,Object类

    Java面向对象知识汇总.xmind

    本资源建议用Xmind打开,汇集了我学习JavaSE部分面向对象的总结,用了思维导图的方式。细节突出,重点突出,很适合新手参考学习,也适合新手总结自己的思维导图的参考。

    EQQ代码简易版.zip适合javaSE 基于多线程面向对象思想,接口集合等基础技术

    《基于JavaSE的EQQ代码简易版:多线程与面向对象实践》 在Java编程领域,Java Standard Edition(JavaSE)是学习的基础,它提供了丰富的API和强大的工具,为开发桌面应用程序、服务器端应用以及分布式系统提供了...

    Java自学视频教程-JavaSE基础-面向对象基础-01、面向对象概述.mp4

    Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的...

    Java中的面向对象这一章的思维导图

    javaSE中面向对象是一个非常不好理解的章节,很多大学老师都没法讲清楚这章,这是我花了不少时间进行整理梳理出来的思维导图,对于Java的学习者来说,这个思维导图还是很有用的

Global site tag (gtag.js) - Google Analytics