import java.lang.reflect.Array.set
/**属性拥有默认提供的setter和getter方法
* setter:提供给外部设置值的一个方法
* getter:提供给外部访问值
* val声明的变量 默认只有getter方法,var有setter和getter
* 比如:setWeight()和getWeight
* 重写get和set方法:
* 在设置值(dog1.weight=30)时:进入到weight的set方法
*
*/
class Shape{
var SideCount = 0
fun perimeter():Int{
return 0
}
class Inclass{/**嵌套类,和外部类没有关系,唯一的关系是在外部类的内部**/
//静态类,当外部类被加载的时候就会被加载进来。不能访问外部类的属性和方法
}
/**内部类,普通的实例类,必须要有外部的一个对象才能访问,可以访问外部类的属性和方法(因为已经有对象)*/
inner class DoSomething{
}
}
/**继承、封装、多态。
* 继承:获取父类的所有东西,extends和 ":"
* open class Animal{}
* class Dog:Animal(){}
* 类默认不能被继承(私有),使用open修饰这个类才能被继承
* 自定义控件View和ViewGroup
*/
class Network{
companion object{
var cont:Int=0
}
fun Instance():Network{
var a = Network()
return a
}
var data:String? = null
set(value) {
field=value
print("set方法")
showUI()
}
fun loadData(){
data = "网易新闻"
}
fun showUI(){
Network.cont+=1
println("把数据显示到界面上:${data} 第${cont}次")
}
}
open class Animal(name:String){
open
var weight:Int = 10
set(value) {field=value+1}
get(){return field-1}
open fun sleep(){
print("Animal Sleep")
}
}
class Cat(hh:Int){
//对象创建:0、主构造函数 1、属性 2、init 3、次构造函数
var age = 10
init {
print("init方法")
println("$age")
}
constructor(name:String,age:Int):this(age){
print("次构造函数")
this.age+=1/**this调用该方法的对象*/
print("$age")
}
/**补充:this的使用:
*
*/
//重写override,重载overload
}
class Dog(var name:String):Animal(name){
override fun sleep(){
super.sleep()
print(" $name is sleeping")
}
}
fun main() {
var shape = Shape()
var inclass = Shape.Inclass()/**不需要创建对象**/
var innerclass = Shape().DoSomething()/**需要创建对象,再调用对象的类*/
var a = Network()
a.loadData()
a.showUI()
println()
// var b = Cat("小猫")
var c = Dog("xh")
c.sleep()
}
网友评论