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 – 變量, 類型和 函數
參考