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

swift的静态属性(方法)和java的不同,第1张

概述swift在任何情况下静态属性都要加上类名做为前缀, 在java中通过实例名使用静态属性是一个warning, 在swift中这里是一个错误 class Dog { static var name: String { return "xiaohua" } func bark(){ // error: static member 'n

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);	}	}
总结

以上是内存溢出为你收集整理的swift的静态属性(方法)和java的不同全部内容,希望文章能够帮你解决swift的静态属性(方法)和java的不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存