Dart4Flutter -01 – 变量, 类型和 函数java
Dart4Flutter-拾遗01-flutter-dart环境搭建post
下面是建立一个类和建立类的实例。ui
main(List<String> args) {
Dog d = new Dog();
}
class Dog {
}
复制代码
如今咱们给类添加实例变量和构造函数,添加age和name属性给Dog类。this
main(List<String> args) {
Dog d = new Dog('Duffy', 2);
print(d.name);
}
class Dog {
String name;
int age;
Dog(String name, Stirng age) {
this.name = name;
this.age = age;
}
}
复制代码
Dart提供了更加简单直接的方式定义构造函数,以下:spa
main(List<String> args) {
Dog d = new Dog('Duffy', 2);
print(d.name);
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
}
复制代码
如上所示,咱们一行就定义了构造函数,其中第一个参数复制给name属性,第二个参数赋值给age属性。code
dart提供了另外一种定义函数的方式为:命名构造函数。cdn
main(List<String> args) {
Dog d = new Dog.newBorn();
print(d.name);
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
}
复制代码
如上所示,给构造函数提供了名称,这样作使得不一样的构造函数变的更加清晰。
你可使用extends
关键字继承其余的类。
main(List<String> args) {
Pug p = new Pug('Duffy', 5);
print(p.name);
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
}
class Pug extends Dog {
Pug(String name, int age): super(name, age);
}
复制代码
Pug 类继承Dog类,经过super
关键字调用Dog类的构造函数。
你也能够经过this关键字,在冒号以后调用同一个类中的其余构造函数。
main(List<String> args) {
Pug p = new Pug.small('Duffy');
print(p.name);
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
}
class Pug extends Dog {
Pug(String name, int age): super(name, age);
Pug.small(Stirng name): this(name, 1);
Pug.large(Stirng name): this(name, 3);
}
复制代码
如上所示,咱们定义了两个命名构造函数,他们只须要dog的名字,而后调用Pug的默认构造函数。
在类中定义方法和独立定义方法是同样的。
main(List<String> args) {
Dog d = new Dog('Duffy', 10);
d.bark();
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
bark() {
print('Bow Wow');
}
}
复制代码
重写方法同样简单。
main(List<String> args) {
Pug p = new Pug.small('Duffy');
p.bark();
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
bark() {
print('Bow Wow');
}
}
class Pug extends Dog {
Pug(String name, int age): super(name, age);
Pug.small(Stirng name): this(name, 1);
Pug.large(Stirng name): this(name, 3);
@override
bark() {
print('Meow!');
}
}
复制代码
默认,获取类中的任何变量均可以直接引用变量的名字。例如,dog.name,能够直接获取或者赋值name的值。可是有时候咱们但愿自定义属性的getter和setter方法,可使用get和set关键字自定义getter和setter方法。
main(List<String> args) {
Dog d = new Dog('Duffy', 5);
d.respectedName = 'Mr.Duffy';
print(d.respectedName);
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
String get respectedName {
return 'Mr.$name';
}
set respectedName(String newName) {
name = newName;
}
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
bark() {
print('Bow Wow');
}
}
复制代码
如今,你可能在想,name属性是能够访问并且能够被随意修改。来让我处理一下,使name属性私有化。
默认类中的全部属性和方法是public的。在dart中,能够在属性和方法名前添加“_”使私有化。如今让咱们使name属性私有化。
main(List<String> args) {
Dog d = new Dog('Duffy', 5);
print(d.name); //This will throw error
}
class Dog {
String _name;
int age;
Dog(this.name, this.age);
String get respectedName {
return 'Mr.$name';
}
set respectedName(String newName) {
name = newName;
}
Dog.newBorn() {
name = 'Doggy';
age = 0;
}
bark() {
print('Bow Wow');
}
_hiddenMethod() {
print('I can only be called internally!');
}
}
复制代码
你能够经过abstract
关键字声明抽象类
abstract class AbstractDog {
void bark();
void _hiddenMethod();
}
复制代码
你只须要在类声明前添加abstract
关键字,方法不须要。方法只须要签名,不须要实现。
若是想让方法或者属性静态化,只须要在声明前添加static
关键字。
main(List<String> args) {
Dog.bark();
}
class Dog {
String name;
int age;
Dog(this.name, this.age);
static bark() {
print('Bow Wow');
}
}
复制代码
dart 支持枚举,用法和java同样。
main(List<String> args) {
Dog d = new Dog('Duffy', 12, CurrentState.sleeping);
print(d.state == CurrentState.sleeping); //Prints 'true'
}
enum CurrentState {
sleeping,
barking,
eating,
walking
}
class Dog {
String name;
int age;
CurrentState state;
Dog(this.name, this.age, this.state);
static bark() {
print('Bow Wow');
}
}
复制代码
dart全面支持泛型。假设你想在你定义的类中,想持有任意类型的数据。以下是怎样使用泛型定义这样的类。
main(List<String> args) {
DataHolder<String> dataHolder = new DataHolder('Some data');
print(dataHolder.getData());
dataHolder.setData('New Data');
print(dataHolder.getData());
}
class DataHolder<T> {
T data;
DataHolder(this.data);
getData() {
return data;
}
setData(data) {
this.data = data;
}
}
复制代码
结束
Dart4Flutter - 01 – 变量, 类型和 函数
参考