Java类的定义:

成员变量会默认初始化,局部变量不会默认初始化。

如何在内存中区分类和对象:

♦类是静态的概念,代码区

♦对象是new出来的,位于堆内存,类的每一个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。

对象的创建和使用:

♦必须使用new关键字创建对象

♦使用对象(引用).成员变量或来引用对象的成员变量

Dog d = new Dog();

d.getFurColor();

♦使用对象(引用).方法(参数列表)来调用对象的方法

Dog d = new Dog();

Mouse mm = new Mouse();

d.catchMouse(mm);

♦同一类的每个对象有不同的成员变量存储空间

♦同一类的每个对象共享该类的方法

Dog类:

public classDog {

String furColor;floatheight;floatweight;voidcatchMouse(Mouse m) {

m.scream(m);

}public static voidmain(String[] args) {

Dog d= newDog();

Mouse mm= newMouse();

d.getFurColor();

d.catchMouse(mm);

}

}

Persion类:

public classPersion {public static voidmain(String[] args) {

Persion p= newPersion();

Persion p1= new Persion(400);

p.info();

p.info("ok");

}//成员变量

private intid;private int age = 20;//方法定义

public int getAge(){returnage;}public void setAge(int i){age =i;}public int getId(){returnid;}voidinfo() {

System.out.println("my id is :" +id);

}voidinfo(String t){

System.out.println(t + "id" +id);

}

Persion(){

id= 100;

age= 20;

}

Persion(int_id){

id=_id;

age= 30;

}

Persion(int _id,int_age){

id=_id;

age=_age;

}

}

构造方法重载:

♦与普通方法一样,构造方法也可以重载

Persion(){

id= 100;

age= 20;

}

Persion(int_id){

id=_id;

age= 30;

}

Persion(int _id,int_age){

id=_id;

age=_age;

}

this关键字:

♦在类的方法定义中使用的this关键字代表使用该方法的对象的引用

♦当必须指出当前使用方法的对象是谁时要使用this

♦使用this可以处理方法中成员变量和参数重名的情况

♦this可以看作一个变量,它的值是当前对象的引用

super关键字:

♦在类中,用static声明的成员变量为静态变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份

♦用static声明的方法为静态方法,在调用改方法时,不会讲对象的引用传递给他,所以在static方法中不可访问非static的成员

静态方法不再是针对于某个对象调用,所以不能访问非静态成员

♦可以通过对象的引用或类名(不需要实例化)访问静态变量。

public classCat {private static int sid = 0;privateString name;intid;

Cat(String name){this.name =name;

id= sid++;

}public voidinfo(){

System.out.println("My name is"+name+"No."+id);

}public static voidmain(String[] args) {

Cat.sid= 100;

Cat mimi= new Cat("mimi");

Cat pipi= new Cat("pipi");

mimi.info();

pipi.info();

}

}

继承:

public classPersion {privateString name;private intage;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

}class Student extendsPersion{privateString school;publicString getSchool() {returnschool;

}public voidsetSchool(String school) {this.school =school;

}

}classTest{public static voidmain(String[] args) {

Student student= newStudent();

student.setName("John");

student.setSchool("SCH");

student.setAge(24);

System.out.println(student.getName());

System.out.println(student.getAge());

System.out.println(student.getSchool());

}

}

方法重写:

♦在子类中可以根据需要对从基类中继承来的方法进行重写

♦重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型

♦重写方法不能使用比被重写方法更严格的访问权限

classPerson {privateString name;private intage;public void setName(String name){this.name=name;}public void setAge(int age) {this.age=age;}public String getName(){returnname;}public int getAge(){returnage;}publicString getInfo() {return "Name: "+ name + "\n" +"age: "+age;

}

}class Student extendsPerson {privateString school;public String getSchool() {returnschool;}public voidsetSchool(String school)

{this.school =school;}publicString getInfo() {return "Name: "+ getName() + "\nage: "+getAge()+ "\nschool: "+school; //重写

}

}public classTestOverWrite {public static voidmain(String arg[]){

Student student= newStudent();

Person person= newPerson();

person.setName("none");

person.setAge(1000);

student.setName("John");

student.setAge(18);

student.setSchool("SCH");

System.out.println(person.getInfo());

System.out.println(student.getInfo());

}

}

super关键字:

♦在java类中使用super来引用基类的成分:

public classTestInherit {public static voidmain(String[] args) {

ChildClass cc= newChildClass();

cc.f();

}

}class ChildClass extendsFatherClass{public intvalue;public voidf(){super.f();

value= 200;

System.out.println("ChildClass.value="+value);

System.out.println(value);

System.out.println(super.value);

}

}classFatherClass{public intvalue;public voidf(){

value= 100;

System.out.println("FatherClass.value="+value);

}

}

打印结果为:

FatherClass.value=100ChildClass.value=200

200

100

继承中的构造方法:

♦子类的构造的过程中必须调用其父类的构造方法

注释super(300);会报错。原因如上

SubClass() {

super(300);

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

}

♦子类可以在自己的构造方法中使用super(argument_list)调用父类的构造方法。

◊使用this(argument_list)调用本类的另外的构造方法。

◊如果使用super,必须写在子类构造方法的第一行。

调换super(300)位置;会报错。原因如上

SubClass() {

super(300);

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

}

♦如果子类的构造方法中没有显示地调用父类构造方法,则系统默认调用父类的无参构造方法。

public classTestSuperSub {public static voidmain(String[] args) {//SubClass sc1 = new SubClass();

SubClass sc2 = newSubClass();

}

}

打印结果:

SuperClass(300)

SubClass()

♦如果子类构造方法中既没有显示调用父类构造方法,而父类中有没有无参构造方法,则编译出错。

注释这个父类的构造方法,编译出错,原因如上。

SuperClass() {

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

}

整体练习代码:

packagecom.luluyu.test;public classTestSuperSub {public static voidmain(String[] args) {

SubClass sc1= newSubClass();

SubClass sc2= newSubClass();

}

}classSuperClass {private intn;

SuperClass() {

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

}

SuperClass(intn) {

System.out.println("SuperClass(" + n + ")");this.n =n;

}

}class SubClass extendsSuperClass {private intn;

SubClass(intn) {//super();

System.out.println("SubClass(" + n + ")");this.n =n;

}

SubClass() {super(300);

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

}

}

对象转型:

♦一个父类的引用类型变量可以“指向”其子类的对象。

♦一个父类的引用不可以访问其子类对象新增加的成员(属性和成员)。

♦可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。

♦子类的对象可以当作父类的对象来使用称作向上转型,反之称为向下转型。

练习代码:

package com.luluyu.test;

public class test {

public static void main(String[] args) {

Animal a = new Animal("name");

Cat c = new Cat("catname","blue");

Dog d = new Dog("dogname","black");

System.out.println(a instanceof Animal);//true

System.out.println(c instanceof Animal);//true

System.out.println(d instanceof Animal);//true

System.out.println(a instanceof Cat);//false

a = new Dog("bigyellow","yellow");

System.out.println(a.name);//bigyellow

System.out.println(a instanceof Animal);//true

System.out.println(a instanceof Dog);//true

Dog d1 = (Dog) a;//强制类型转化

System.out.println(d1.eyesColor);//yellow

}

}

class Animal{

public String name;

public Animal(String name) {

this.name = name;

}

}

class Cat extends Animal{

public String eyesColor;

Cat(String n,String c) {

super(n);

eyesColor=c;

}

}

class Dog extends Animal{

public String eyesColor;

Dog(String n,String c) {

super(n);

eyesColor=c;

}

多态绑定和多态:

动态绑定是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态需要三个条件:

1.要有继承

2.要有重写

3.父类引用指向子类对象

packagecom.luluyu.op;public classTest {public static voidmain(String[] args) {

Cat c= new Cat("catname", "blue");

Dog d= new Dog("Dogname", "black");

Lady L1= new Lady("L1", c);

Lady L2= new Lady("L2", d);

L1.myPetEnjoy();

L2.myPetEnjoy();

}

}classAnimal {privateString name;publicAnimal(String name) {super();this.name =name;

}public voidenjoy() {

System.out.println("叫声。。。。。。。。");

}

}class Cat extendsAnimal {privateString eyesColor;publicCat(String n, String c) {super(n);

eyesColor=c;

}public voidenjoy() {

System.out.println("猫叫声。。。。。。。");

}

}class Dog extendsAnimal {privateString furColor;publicDog(String n, String c) {super(n);

furColor=c;

}public voidenjoy() {

System.out.println("狗叫声。。。。。。。");

}

}classLady {privateString name;privateAnimal pet;publicLady(String name, Animal pet) {this.name =name;this.pet =pet;

}public voidmyPetEnjoy() {

pet.enjoy();

}

}

抽象类:

♦用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。

♦含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写

♦抽象类不能被实例化

♦抽象方法只需声明,而不被实现

/***

* 当一个类有抽象方法时,这个类必须是抽象类

**/

abstract classAnimal {privateString name;publicAnimal(String name) {super();this.name =name;

}public abstract voidenjoy();

}

abstract classAnimal {privateString name;publicAnimal(String name) {super();this.name =name;

}public abstract voidenjoy();

}/***

*含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写*/

abstract class Cat extendsAnimal {privateString eyesColor;publicCat(String n, String c) {super(n);

eyesColor=c;

}public abstract voidenjoy();

}

final关键字:

♦final修饰变量的值不能够被改变

◊final修饰的成员变量

◊final修饰的局部变量(形参)

♦final修饰的方法不能够被重写

♦final修饰的类不能够被继承

接口:

♦接口是抽象方法和常量值的定义的集合

♦从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现

public interfaceRunner {public voidstart();public voidrun();public voidstop();

}

接口的特性:

♦接口可以多重实现

♦接口中声明的属性默认为public static final的,也只能是public static final

♦接口中只能定义抽象方法,而且这些方法默认为public,也只能是public

♦接口可以继承其它的的接口,并添加新的属性和抽象方法

java 面向对象继承的思想_Java面向对象思想相关推荐

  1. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  2. java 面向对象继承的思想_Java面向对象思想!

    刚开始学习Java的时候,一个人跌跌撞撞摸索着往前走,很多东西理解的也懵懵懂懂,后来实践的多了,才慢慢清楚:许多东西虽然很基础但是却很重要,是需要反复思考和加深理解的.在此分享一些归纳总结后的技术干货 ...

  3. java继承类大全_Java 面向对象继承部分(示例代码)

    被继承的类称为父类(超类),继承父类的类称为子类(派生类) 通过继承可以实现代码重用 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以 ...

  4. java opp 是什么意思_Java面向对象学习

    Java面向对象学习 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考.最后,才对某个分类下的细节进行面向过程的思索 面向对象适合处理复杂的问题, ...

  5. java 面向对象的特性 抽象_java面向对象的四个特性

    java面向对象编程是指:Java语言提供类.接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements).另外 ...

  6. java面向对象结课总结_java面向对象课程总结

    前言:从大一下学期接触java面向对象课程,到现在java面向对象课程也是告了一段落,到这一阶段我也学了java的大部分的知识,基本的我大概已经懂了,但是在学习java面向对象这个课程中也积累了很多学 ...

  7. java面向对象程序设计题库_java面向对象程序设计习题集.doc

    java面向对象程序设计习题集.doc 1JAVA 面向对象程序设计习题集 23目 录引 言 .6第一章 JAVA 基础 7一.填空题 7二.判断题 9三.选择题 9四.程序阅读题 26第二章 控制结 ...

  8. java面向对象编程的思想_java面向对象编程思想

    Java与面向对象 一.类与对象 (1)对象是Java程序的核心,对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体 (2)类是用来创建同一类型的对象的"模板",在一个类 ...

  9. java面向对象编程的思想_java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

最新文章

  1. 谷歌这波大动作,暴露了什么信号?
  2. 马上 2018 年了,该不该下定决心转型AI呢?
  3. 【T07】不要低估tcp的性能
  4. zerodivisionerror什么意思python-Python with as的用法
  5. html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
  6. Android Service 形式分类
  7. linux sed命令:查看gitlab配置文件删除注释行并过滤空行后的内容
  8. 在C#中实现Socket端口复用
  9. python编程口诀_科学网—Python编程技巧汇总 - 高关胤的博文
  10. string数组转map_[#x27;1#x27;, #x27;2#x27;, #x27;3#x27;].map(parseInt) 映射解析
  11. 总结篇——mysql中使用sql语句操作表字段
  12. 一致性hash算法_一致性 Hash 算法的实际应用
  13. ubuntu 程序卡主解决方案
  14. ArcGIS Runtime SDK for Android 100开发环境部署
  15. MariaDB 安装
  16. 2019年终总结-坚持的力量
  17. Docker 学习笔记(八)-- Dockerfile 构建CentOS 实战测试
  18. Error: Registry key ‘Software\JavaSoft\Java Runtime Environment’\CurrentVersion’
  19. Kafka SSL 和 ACL 配置
  20. springboot低版本整合knife4j

热门文章

  1. 表达式中常用到的运算符
  2. 量子计算机是否存在相对论,潘建伟团队再登Science:寻找广义相对论与量子力学的桥梁...
  3. r语言mfrow全程_R语言中的色彩_LearningR - SegmentFault 思否
  4. java中的gui_java gui快速入门教程
  5. 不相关子查询的工作方式是_课题组工作|Nucleic Acids Research|基于表达密度谱的特征子空间分离及相关单细胞转录组分群新算法...
  6. c语言编程数学黑洞,一个数学黑洞——6174
  7. mysql忽略数据类型_MYSQL 常用数据类型
  8. mysql 远程连接取消权限_MYSQL远程登录权限设置
  9. 二分查找递归与非递归的时间比较_我们说一说Python的查找算法!
  10. java varbinary_SQL 中存放 varbinary型数据