java 面向对象继承的思想_Java面向对象思想

Java类的定义:

e3b8c3906b30d3e1f6f2e461ed44ead5.png

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

7087598b0978b48d902328718f8dba07.png

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

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

♦对象是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);

}

}

a5ca00d778e6981282cb0e0752a09151.png

eef485d4d32a8766c4d1037c97386cf4.png

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();

}

}

3708b853fc778fb03c7a53aa3f2cc52a.png

继承:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 垃圾回收手动回收_Java垃圾回收(4)

java 垃圾回收手动回收G1:垃圾优先 G1收集器是热点JVM中要实现的最新收集器。 自Java 7 Update 4以来,它一直是受支持的收集器。OracleGC团队也公开表示,他们对低暂停GC的希望是完全实现的G1。 这篇文章来自我之前的垃圾收集博客文章&#xf…

使用正确的垃圾收集器将Java内存使用量降至最低

大小对于软件至关重要。 很明显,与大型整体方法相比,在微服务体系结构中使用小型组件具有更多优势。 最新的Java版本的Jigsaw可帮助分解旧应用程序或从头开始构建新的云原生应用程序。 这种方法减少了磁盘空间,构建时间和启动时间。 但是&am…

java 鼠标画多个圆形_点击鼠标不同的建(左、中、右)画一个不同颜色的圆

[java]代码库import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;public class T1 extends JFrame{int x;int y;Color c;public T1(){this.setSize(600,400);this.setDefaultCl…

jslint4java_JSLint检测javascript的错误提示

“Missing semicolon.” : “缺少分号.”,“Use the function form of \”use strict\”.” : “使用标准化定义function.”,“Unexpected space after ‘-’.” : “在’-后面不应出现空格.”,“Expected a JSON value.” : “请传入一个json的值.”,“Mixed spaces and tabs.…

jar运行 osgi保存_自动化的OSGi测试运行程序

jar运行 osgi保存在我的团队成员中,我以忘记维护(JUnit)测试套件而闻名。 我只是无法完成手动添加测试套件这一额外步骤。 幸运的是,有连续的集成服务器可以按命名模式收集测试。 如果我介绍的一项孤立测试失败了,那么…

mysql 去掉默认约束_06. 默认约束-创建、添加和删除

# 数据库的基本操作创建 删除 数据库、创建 删除表修改 表名 数据类型 字段名 添加字段删除 字段 调整字段位置 更换存储引擎 删除外键删除 数据表 包括被关联父表# 数据完整性六项约束主键约束(PRIMARY KEY)自增约束(AUTO_INCREMENT PRIMARY KEY)唯一约束(UNIQUE)默认约束(DEF…

通过粘性仙人掌基元进行延迟加载和缓存

您显然知道什么是延迟加载 ,对吗? 而且您无疑知道缓存 。 据我所知,Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality(2012)》 假设我们需…

mysql与sim900a_sim900a的应用,基于SIM900A-GPRS模块的远程文件传输实例

SIM900A是一个比较实用的GPRS模块,进行简单的配置就可以进行用于数据传输,配置使用AT指令进行交互,用GPRS远程传输数据时,有两种方式,一种是正常的模式,没法送一次要发送0x1a来开启数据发送,另一…

java语言编程基础_java语言编程基础

java语言基本要素高级语言如c、c#、java等都有一些共同性的东西:关键字、标识符、运算符、注释、数据类型、常量和变量、语句、函数、数组。高级语言在这些要素上大同小异。Java关键字:一些有特定含义,有专门用途的字符串(keyword)。Java中关…

junit mockito_JUnit和Mockito合作

junit mockito这次,我想对测试框架Mockito进行概述。 毫无疑问,这是用于测试Java代码的最受欢迎的工具之一。 我已经对Mockito的竞争对手EasyMock进行了概述。 这篇文章将基于有关EasyMock的示例应用程序。 我的意思是代表咖啡机功能的类。 使用Mockito…

debian10树莓派4安装mysql_树莓派4上如何安装 Raspbian Buster

随着 Raspberry Pi 4 主板的问世,了解如何使用Raspbian Buster设置您的操作系统。你的新Pi 4到了邮箱,你已经设置了办公桌,您已准备好安装操作系统。对于初学者来说,Raspbian为Pi制造商提供了出色的桌面体验。最重要的是&#xff…

借助财务客户评估解决方案在云中构建AppDev

现代JBoss BRMS时代最古老的业务逻辑演示是2012年6月发布的“ 客户评估”示例 。 那时,JBoss BRMS包含规则,事件和流程。 该项目提供了一个完整安装和配置的环境,用于展示该项目和所有可用的BPM组件。 它包括一个带有单元测试的JBoss Develo…

jvm 性能_JVM性能魔术

jvm 性能HotSpot是我们众所周知和喜爱的JVM,是Java和Scala汁流淌的大脑。 多年来,许多工程师对其进行了改进和调整,并且每次迭代时,其代码执行的速度和效率都接近于本机编译代码。 JIT(“及时”)编译器是…

java高级编程期末考试题_java高级编程考题

Java高级课程测试1在进行swing开发时,经常用的布局管理器有那几种?(5)2Gui组件,容器,框架,到底有怎样的关系,请举例说明?(5)3在进行swing开发中会用到事件处理,那事件处理的三个主要…

spring 事务 会话_测试Spring的“会话”范围

spring 事务 会话在基于Spring的Web应用程序中,bean的作用域可以是用户“会话”。 从本质上讲,这意味着对会话范围Bean的状态更改仅在用户会话范围内可见。 本条目的目的是简单地突出显示Spring Test MVC提供的一种方法,用于测试将会话范围的…

Hollowjars,部署扫描程序以及Wildfly群体为何很棒

在上一篇文章中,我描述了如何使用OpenLiberty和maven作为独立服务器或maven构建的一部分来启动服务器,以及如何创建fatjar包。 在这篇文章中,我正在研究如何使用Wildfly群。 我仍在尝试使MicroProfile在Wildfly full上运行,因此&…

Java调用跟踪系统_Tracer:在分布式系统中的调用跟踪和日志相关

Tracer: Distributed system tracingTracer noun, /ˈtɹeɪsɚ/: A round of ammunition that contains a flammable substance that produces a visible trail when fired in the dark.Tracer is a library that manages custom trace identifiers and carries them through …

java 垃圾回收手动回收_Java垃圾回收(3)

java 垃圾回收手动回收接下来是我的前两篇垃圾收集博客文章: GC热点概述 。 并行垃圾收集器 。 并发标记扫描 Hotspot中的并行垃圾收集器旨在最大程度地减少应用程序进行垃圾收集所花费的时间,这称为吞吐量 。 对于所有应用程序而言,这并不…

java测试netty_《Netty官方文档》基准测试

原文链接 译者:lijunshuNetty有一个模块叫’netty-microbench’,我们可以用他来执行一系列的微型基准测试。Netty-microbench是基于OpenJDK JMH构件的(HotSpot的推荐基准测试方案)。当你开始netty基准测试时,你不需要额外的依赖。运行基准测…

Java命令行界面(第30部分):观察

这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数。 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供了一些一般性的考虑,以便在选择2…