animal

Java中对象和引用的理解

∥☆過路亽.° 提交于 2019-12-22 12:57:06
偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆。 一、对象和引用的概念: 在Java中万物皆对象,比如我们定义一个简单的动物类: class Animal { String count; String weight; .... } 有了这个Animal类之后,我们可以来创建一个Animal对象: Animal an = new Animal(); 我们把编写这个语句的动作就称作创建一个对象,细化这个动作为: 1. 右面的”new Animal”,是以Animal类为模板的,在堆空间里创建一个Animal对象; 2. 末尾的”( )”代表着:在对象创建之后,立即调用Animal类的构造函数,对新生成的对象进行初始化。(如果没构造函数,Java会有一个默认的构造函数的); 3. 左面的”Animal an” 创建了一个Animal类引用变量。即以后可以用来指向Animal对象的对象引用; 4. “=” 操作符使对象引用指向刚才创建的那个Animal对象。 拆分开也就是:等同于 Animal an; an = new Animal(); 有两个实体:一个是对象引用变量;一个是对象本身。 在java中,都是通过引用来操纵对象的,这也是两者的区别。 二、对象和引用的区别: 1

09-04 多态性与鸭子类型

落花浮王杯 提交于 2019-12-20 13:00:17
多态与多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪 class Animal : #同一类事物:动物 def talk ( self ) : pass class Cat ( Animal ) : #动物的形态之一:猫 def talk ( self ) : print ( '喵喵喵' ) class Dog ( Animal ) : #动物的形态之二:狗 def talk ( self ) : print ( '汪汪汪' ) class Pig ( Animal ) : #动物的形态之三:猪 def talk ( self ) : print ( '哼哼哼' ) #实例化得到三个对象 >> > cat = Cat ( ) >> > dog = Dog ( ) >> > pig = Pig ( ) 多态性指的是可以在不用考虑对象具体类型的情况下而直接使用对象,这就需要在设计时,把对象的使用方法统一成一种:例如cat、dog、pig都是动物,但凡是动物肯定有talk方法,于是我们可以不用考虑它们三者的具体是什么类型的动物,而直接使用 >> > cat . talk ( ) 喵喵喵 >> > dog . talk ( ) 汪汪汪 >> > pig . talk ( ) 哼哼哼 更进一步,我们可以定义一个统一的接口来使用 >> > def Talk (

python基础----多态与多态性、super函数用法、继承原理

夙愿已清 提交于 2019-12-20 10:14:09
一、多态与多态性 ㈠多态: 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组。 2. 动物有多种形态:人,狗,猪 1 import abc 2 class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 3 @abc.abstractmethod 4 def talk(self): 5 pass 6 7 class People(Animal): #动物的形态之一:人 8 def talk(self): 9 print('say hello') 10 11 class Dog(Animal): #动物的形态之二:狗 12 def talk(self): 13 print('say wangwang') 14 15 class Pig(Animal): #动物的形态之三:猪 16 def talk(self): 17 print('say aoao') 3. 文件有多种形态:文件文件,可执行文件 1 import abc 2 class File(metaclass=abc.ABCMeta): #同一类事物:文件 3 @abc.abstractmethod 4 def click(self): 5 pass 6 7 class Text(File): #文件的形态之一

this关键字

喜欢而已 提交于 2019-12-20 02:23:25
/* * 需求:使用java类描述一个动物 * * this关键字注意事项 * 1:存在同名的成员变量与局部变量时。在方法内部访问的 * 都是局部变量(java 采取的是就近原则的机制访问的)。 * 2.如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下 * 那么java编译器会在该变量的前面添加一个this关键字。 * * this关键字: * this关键字代表了所属函数的调用者对象。 * * * * this的作用: * 1.如果存在同名的成员变量与局部变量时,在方法内部默认是访问 * 局部变量的数据,可以通过this关键字指定访问成员变量的数据。 * 2. 在一个构造函数中可以调用另外一个构造函数初始化对象。 * * * this关键字调用其他构造函数的注意事项: * 1.this关键字调用其他的构造函数时,this关键字必须位于 * 构造函数中的第一个语句。 * 2.this关键字在构造函数中不能出现相互调用的情况,因为是一个 * 死循环。 * * */ class Animal{ String name; // 成员变量 String color; public Animal(String n, String c){ name = n; color = c; } public void eat() { //System.out.println("this: "

Hibernate的继承关系分类,annotation表示

纵然是瞬间 提交于 2019-12-16 10:03:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> hibernate继承映射 以下测试是在mysql中进行的。 1、单表方式 Animal.java Java代码 @Entity @Inheritance (strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn (name= "animalType" ) @DiscriminatorValue ( "animal" ) public class Animal { private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId( int id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } } Cat.java Java代码 @Entity @DiscriminatorValue ( "cat" ) public class Cat extends Animal { private String catName;

结构体和方法使用

喜欢而已 提交于 2019-12-15 12:12:17
package main import "fmt" // 示例1。 // AnimalCategory 代表动物分类学中的基本分类法。 type AnimalCategory struct { kingdom string // 界。 phylum string // 门。 class string // 纲。 order string // 目。 family string // 科。 genus string // 属。 species string // 种。 } //这里绑定,这个String方法不需要任何参数声明,但需要有一个string类型的结果声明。我在调用fmt.Printf函数时,使用占位符%s和category值本身就可以打印出后者的字符串表示形式,而无需显式地调用它的String方法。 func (ac AnimalCategory) String() string { return fmt.Sprintf("%s%s%s%s%s%s%s", ac.kingdom, ac.phylum, ac.class, ac.order, ac.family, ac.genus, ac.species) } // 示例2。 type Animal struct { scientificName string // 学名。 AnimalCategory // 动物基本分类

简明易懂的call apply

ぐ巨炮叔叔 提交于 2019-12-14 17:13:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在iteye看到一篇对call解释得相当简明易懂,觉得得宣传一下 : http://uule.iteye.com/blog/1158829 一、方法的定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 2、常用实例 a例 function add(a,b) { alert(a+b); }function sub(a,b) { alert(a-b); } add

Java学习笔记(面向对象下)

心不动则不痛 提交于 2019-12-13 23:14:17
面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法。(用extends关键字) //定义Animal类 class Animal{ String name; //定义name属性 //定义动物叫的方法 void shout(){ System.out.println("动物发出叫声。"); } } //定义Dog类继承Animal类 class Dog extends Animal{ //定义一个打印name的方法 public void printName(){ System.out.println("name = "+name); //父类的name } } public class Test { public static void main(String[] args) { Dog dog = new Dog();//创建一个Dog类的实例对象 dog.name = "tony";//为Dog类的name属性赋值 dog.printName();//调用Dog类的printName()方法 dog.shout();//调用Dog类继承来的shout()方法 } } 运行结果 name = tony 动物发出叫声。 注:①只支持单继承,不允许多重继承

Java 继承

余生颓废 提交于 2019-12-13 18:20:49
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。 在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类 继承中最常使用的两个关键字是extends和implements。 这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。 通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。 所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。 通过过extends关键字可以申明一个类是继承另外一个类而来的,一般形式如下: // A.java public class A { private int i ; protected int j ; public void func ( ) { } } // B.java public class B extends A { } 以上的代码片段说明,B由A继承而来的,B是A的子类。而A是Object的子类,这里可以不显示地声明。 作为子类,B的实例拥有A所有的成员变量,但对于private的成员变量B却没有访问权限,这保障了A的封装性。 IS-A关系

为什么析构函数要声明成virtual

不羁的心 提交于 2019-12-07 07:30:06
(zz)为什么析构函数要声明成virtual 2011-03-08 15:43:00 | 分类: reproduct | 字号 订阅 为什么析构函数要声明成virtual呢? 因为,如果 delete 一个基类的指针时, 如果它指向的是一个子类的对象,那么析构函数不为虚就会导致无法调用子类析构函数,从而导致资源泄露。 当然,另一种做法是将基类析构函数设为 protected. 如果一个类要被使用成多态(polymorphic)的,那么这个virtual是必须的。比如: #include <iostream> class Animal { char* ap; public: Animal() { ap = new char; std::cout << "Animal ctor" << std::endl; } virtual void foo() { std::cout << "Animal::foo" << std::endl; } virtual ~Animal() { std::cout << "Animal dtor" << std::endl; delete ap; } }; class Dog : public Animal { char* dp; public: Dog() { dp = new char; std::cout << "Dog ctor" << std: