swift java混合_swift的静态属性(方法)和java的不同

swift在任何情况下静态属性都要加上类名做为前缀, 在java中通过实例名使用静态属性是一个warning, 在swift中这里是一个错误

class Dog {

static var name: String {

return "xiaohua"

}

func bark(){

// error: static member 'name' cannot be used on instance of type 'Dog'

// 和java不一样, 在instance method中不能直接访问static属性而必须要加类名.

// print(name);这行出错! swift默认为加上self.前缀.

print(Dog.name)

// 动态获取类名的写法

print(self.dynamicType.name)

// 和上面的写法等价

print(self.dynamicType.self.name)

}

}

var d = Dog()

d.bark()

// 使用实例名调用静态属性在swift中是一个错误

// error: static member 'name' cannot be used on instance of type 'Dog'

// print(d.name)

swift中的static属性(默认就是final) === swift中的final class ==== java中的final static

swift多出了class 属性这个概念, 用来表示`可以被子类重写的static属性`,  然并卵, 我觉得不如直接使用static 和 final static, 少一种概念

class Animal {

final class var name: String {

return "animal"

}

var age: Int = 5

}

class Cat: Animal {

// error: class var overrides a 'final' class var

override class var name: String {

return "cat"

}

}

swift中子类不能覆盖父类的stored property, 但是可以覆盖父类的computed property, 在java中, 属性并没有override一说, 没有定义就会使用父类的, 有定义就会使用子类的.

相应的java代码如下:

package test;

import static java.lang.System.out;

public class Dog {

static String name = "xiaohua";

void bark() {

out.println(name);

}

public static void main(String[] args) {

Dog d = new Dog();

d.bark();

// Warning: The static field Dog.name should be accessed in a static way

String name = d.name;

out.println(name);

Cat c = new Cat();

c.speak();

}

}

class Animal {

// java中的属性即使标记为final也可以被子类覆盖 ?? 很久没写java都有点surprising!

// 应该是java中的属性并没有覆盖这一说法, 修饰为final只是为了将其定义为一个常量.

protected final String name = "animal";

public final static String getName() {

return "animal";

}

}

class Cat extends Animal {

// 没有错误

public String name = "cat";

void speak(){

out.println(this.name);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值