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

	
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...