"); let cat1 = new Cat("gray"); console.log(cat1); // Animal { color: 'gray' } console.log(Object.getPrototypeOf (cat1)); // Animal { name: 'cat1' } console.log(Object.getPrototypeOf(Cat)); // {} console.log(Object.getPrototypeOf (Animal)); // {} console.log(Object.getPrototypeOf(Object.getPrototypeOf(cat1))); // {} console.log(cat1 instanceof Cat); // true console.log(cat1 instanceof Animal); // true console.log(cat1 instanceof Object , Cat)); // true console.log(instance(cat1, Animal)); // true console.log(instance(cat1, Object)); //
var cat1 = {}; // 创建一个空对象 cat1.name = "AA猫"; // 按照原型对象的属性赋值 cat1.color = "黑色"; var = Cat("AA猫","黑色"); var cat2 = Cat("BB猫","白色"); 这种方法的问题依然是,cat1 和 cat2 之间没有内在的联系,不能反映出它们是同一个原型对象的实例。 .color); // 黑色 这时cat1和cat2会自动含有一个 constructor 属性,指向它们的构造函数。 alert("name" in cat1); // true alert("type" in cat1); // true in运算符还可以用来遍历某个对象的所有属性。 for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); }
', 'dog'=>'dog1'} 3 => {"cat"=>"cat1", "dog"=>"dog1"} 4 # key必须为字符串或者标志 5 irb(main):030:0> dict2 = } 11 NameError: undefined local variable or method `cat1' for main:Object 12 Did you mean? '} 16 => {:cat=>"cat1"} 17 # length和size都可以得到长度 18 irb(main):033:0> dict.length 19 => 2 20 irb(main): 034:0> dict.size 21 => 2 22 irb(main):035:0> dict['cat'] 23 => "cat1" 24 # 不支持.访问 25 irb(main):036:0> : 1 # 直接删除 2 => "[\"cat1\", \"dog1\"]" 3 irb(main):040:0> dict.delete('cat') 4 => "cat1" 5 irb(main
var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; var cat2 = = Cat("大毛","黄色"); var cat2 = Cat("二毛","黑色"); 这种方法的问题依然是,cat1和cat2之间没有内在的联系,不能反映出它们是同一个原型对象的实例。 cat1.color); // 黄色 这时cat1和cat2会自动含有一个constructor属性,指向它们的构造函数。 alert("name" in cat1); // true alert("type" in cat1); // true in运算符还可以用来遍历某个对象的所有属性。 for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); } 未完,请继续阅读这个系列的第二部分《构造函数的继承》和第三部分《非构造函数的继承
function Cat(name, color) { this.name = name; } var cat1 = new Cat('猫'); //获取cat1对象的原型对象 var s = Object.getPrototypeOf(cat1); console.log(s); Object.setPrototypeOf(实例对象,原型对象) 为现有对象设置原型对象 第一个是实例对象, function Cat(name) { this.name = name; } var ob = {p:'波斯'}; var cat1 = new Cat('猫'); //设置cat1的原型对象为 ob Object.setPrototypeOf(cat1,ob); console.log(cat1.p);//cat1的原型对象中有p属性 console.log(Object.getPrototypeOf (cat1)); console.log(cat1.
. >>> cat1=Cat() #实例出一只猫 >>> func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能 say miao '' ' 这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。 使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1) '''
var cat1 = new Cat(); alert(cat1.name); // 大毛 类的属性和方法,还可以定义在构造函数的prototype对象之上。 var cat1 = Object.create(Cat); alert(cat1.name); // 大毛 cat1.makeSound(); // 喵喵喵 目前,各大浏览器的最新版本 var cat1 = Cat.createNew(); cat1.sleep(); // 睡懒觉 3.3 私有属性和私有方法 在createNew()方法中,只要不是定义在cat对象上的方法和属性 var cat1 = Cat.createNew(); alert(cat1.sound); // undefined 3.4 数据共享 有时候,我们需要所有实例对象,能够读写同一项内部数据。 cat.changeSound = function(x){ Cat.sound = x; }; return cat; } }; 然后,生成两个实例对象: var cat1
color){ Animal.apply(this, arguments); this.name = name; this.color = color; } var cat1 Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; var cat1 = new Cat("大毛","黄色"); alert(cat1.constructor == Animal); // true 这显然会导致继承链的紊乱(cat1明明是用构造函数Cat生成的),因此我们必须手动纠正,将Cat.prototype Cat.prototype = Animal.prototype; Cat.prototype.constructor = Cat; var cat1 = new Cat("大毛","黄色" 使用的时候,这样写: extend2(Cat, Animal); var cat1 = new Cat("大毛","黄色"); alert(cat1.species); // 动物
先看一组代码,然后进行分析 public class Object01 { public static void main(String[] args) { Cat cat1 = new Cat 4)Cat cat1 = new Cat(); 把创建的猫对象赋 cat1 5)赋完后cat1就成了一个对象 6)第二只猫对象的创建和第一只猫方法一样 Cat cat2 = new Cat(); 类与对象的区别和联系 如:访问修饰符 数据类型 属性名; 如何创建对象 创建对象有两种方法,一种是先声明在创建,一种是直接创建 1)先声明后创建 Cat cat1; // 声明对象 cat1 cat1 = new Cat() ; // 创建对象 cat1 2)直接创建对象 Cat cat1 = new Cat(); // 直接创建对象 一般我们都会使用第二种直接创建对象的方法创建对象,但并不能说第一种方法没用 这里就要和小伙伴们说一下Java内存的结构分析了 1)栈:一般存放基本数据类型,也就是局部变量 2)堆:堆主要存放对象(Cat cat1 ,数组等) 3)方法区:包含常量池(常量,如字符串等),类加载信息
[] args) { DogCatQueue test = new DogCatQueue(); Pet dog1 = new Dog(); Pet cat1 Pet dog3 = new Dog(); Pet cat3 = new Cat(); test.add(dog1); test.add(cat1 test.add(cat2); test.add(dog3); test.add(cat3); test.add(dog1); test.add(cat1 test.add(cat2); test.add(dog3); test.add(cat3); test.add(dog1); test.add(cat1
reluLayer('Name','relu1') fullyConnectedLayer(2,'Name','fc1') concatenationLayer(3,2,'Name','cat1 criticNetwork = addLayers(criticNetwork,actPath); criticNetwork = connectLayers(criticNetwork,'fc5','cat1 reluLayer('Name','relu1') fullyConnectedLayer(2,'Name','fc1') concatenationLayer(3,2,'Name','cat1 actorNetwork = addLayers(actorNetwork,dthetaPath); actorNetwork = connectLayers(actorNetwork,'fc5','cat1
. >>> cat1=Cat() #实例出一只猫 >>> func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能 say miao ''' 这样我们新增了一个形态Cat,由Cat 类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。 使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1) ''' 三 、鸭子类型 Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’ python
因为Cat1我们可以看成是一个成员变量.只不过是一个特殊的成员变量. 成员内部类的高级用法 成员内部类可以向上转型为父类. 成员内部类可以实现一个接口.对外隐藏其实现方法. return new Cat1(); } } 可以看到.内部类Cat 实现了接口IAnmail. 并且外部类返回了内部类的实例化对象. return new Cat1(); } } 首先总结来说. this用于当前类.那么则是区分的本类的成员变量与形参. 如果this前边加上父类名. 则是操作的父类的成员变量. System.out.println("内部进行玩耍"); } } return new Cat1(); //返回实例化对象 以前我们返回的是 new Cat1(); 现在我们知道返回值是一个接口.我们可以直接返回一个接口类. 其实这个类的作用就是返回一个实现接口的对象而已.
java.lang.reflect.InvocationTargetException; public class Main { public static void main(String[] args) { Cat cat1 */ cat1 = new Cat(); cat1.setName("小猫1"); cat1.setAge(1); System.out.println ("cat1:" + cat1); System.out.println(); /** * 2.使用class类的newInstance方法 ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(cat1
3 print('say miao') 4 5 def func(animal): #对于使用者来说,自己的代码根本无需改动 6 animal.talk() 7 8 cat1 =Cat() #实例出一只猫 9 func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能 10 11 12''' 13这样我们新增了一个形态Cat,由Cat类产生的实例cat1, 15使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1) 16''' 多态的更多说明 1def who_am_i(x): 2 print x.whoAmI() 3
name,color){ Animal.apply(this, arguments); this.name = name; this.color = color; } var cat1 Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; var cat1 = new Cat("AA猫","黑色"); alert( alert(cat1.constructor == Animal); // true 这显然会导致继承链的紊乱(cat1明明是用构造函数Cat生成的),因此需要手动纠正,将 Cat.prototype Cat.prototype = Animal.prototype; Cat.prototype.constructor = Cat; var cat1 = new Cat("AA猫","黑色"); alert 使用时这样写: extend2(Cat, Animal); var cat1 = new Cat("AA猫","黑色"); alert(cat1.species); // 动物 至于非构造函数的继承
<iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe>
基本使用 [在这里插入图片描述] VarScope public class VarScope { public static void main(String[] args) { Cat1 cat1 = new Cat1(); cat1.hi(); cat1.cry(); cat1.eat(); } } class Cat1{
var cat1 = new Cat(); alert(cat1.name); // 大毛 类的属性和方法,还可以定义在构造函数的prototype对象之上。 var cat1 = Object.create(Cat); alert(cat1.name); // 大毛 cat1.makeSound(); // 喵喵喵 目前,各大浏览器的最新版本 var cat1 = Cat.createNew(); cat1.makeSound(); // 喵喵喵 这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造,因此可以方便地部署下面的特性 var cat1 = Cat.createNew(); cat1.sleep(); // 睡懒觉 3.3 私有属性和私有方法 在createNew()方法中,只要不是定义在cat对象上的方法和属性 var cat1 = Cat.createNew(); alert(cat1.sound); // undefined 3.4 数据共享 有时候,我们需要所有实例对象,能够读写同一项内部数据。
数据类型体现不出来 //(2) 只能通过[下标]获取信息,造成变量名字和内容的对应关系不明确 //(3) 不能体现猫的行为 String[] cat1 Cat cat1 = new Cat(); 把创建的猫赋给 cat1 //3. cat1 就是一个对象 Cat cat1 = new Cat(); cat1.name = "小白