[아이폰] - 스위프트 상속과 오버라이딩
○ 스위프트 상속과 오버라이딩 |
자바와 마찬가지로 아이폰을 위한 스위프트 언어에서도 상속과 오버라이딩이 있다 오버라이딩(Overriding) : 자식 클래스에서 재정의 오버로딩(Overloading) : 매개변수의 다형성 오버라이딩 사용 시 사용할 메소드 앞에 override 라고 적어만 주면 끝이다 예를들어, func getArea() -> Int { return 0 } 을 override func getArea() -> Int { let area = height * width return area } 같이 말이다 스위프트에서 클래스를 만들 때, NSObject를 상속받아 썼었다 예를들어, class Student : NSObject { } 처럼 말이다 그렇다면 따른 것을 상속받아 사용할 때, NSObject 자리에 상속받을 다른 클래스명을 써주면 끝이다 import UIKit class ShapePoint : NSObject { // 클래시 만들 시 NSObject 상속받아 사용 var startx : Int // 속성들 정의 var starty : Int init(startx:Int, starty:Int){ // init() 초기화 self.startx = startx self.starty = starty super.init() } convenience override init(){ // convenience override init() 초기화 self.init(startx:0, starty:0) } func getArea() -> Int { // 메소드 정의 return 0 } } class Retangle : ShapePoint { // Rectangle 클래스는 ShapePoint를 상속받는다 var endx : Int // 속성들 정의 var endy : Int var width : Int var height : Int init(endx:Int, endy:Int, width:Int, height:Int){ // init() 초기화 self.endx = endx self.endy = endy self.width = width self.height = height super.init(startx:0, starty:0) } func getWidthAndHeight(){ // 메소드 정의 width = endy - starty height = endx - startx } override func getArea() -> Int { // 오버라이딩(자식 클래스에서 재정의) let area = height * width return area } } class Square : ShapePoint { // Square 클래스는 ShapePoint를 상속받는다 var endx : Int // 속성들 정의 var endy : Int var widthAndHeight : Int init(endx:Int, endy:Int, widthAndHeight:Int){ // init() 초기화 self.endx = endx self.endy = endy self.widthAndHeight = widthAndHeight super.init(startx:0, starty:0) } func getWidthAndHeight(){ // 메소드 정의 let width = endy - starty let height = endx - startx if width <= height { widthAndHeight = width } else { widthAndHeight = height } } override func getArea() -> Int { // 오버라이딩(자식 클래스에서 재정의) let area = Int(pow(Double(widthAndHeight), Double(2))) return area } } // 인스턴스 변수 생성 및 출력 let rect = Retangle(endx: 0, endy: 0, width: 0, height: 0) rect.startx = 0 rect.starty = 0 rect.endx = 10 rect.endy = 15 rect.getWidthAndHeight() print("너비 : \(rect.width), 높이 : \(rect.height)") // 너비 : 15, 높이 : 10 print("직사각형 면적 : \(rect.getArea())") // 직사각형 면적 : 150 let square1 = Square(endx:14, endy:15, widthAndHeight:0) square1.getWidthAndHeight() print("너비 : \(square1.widthAndHeight), 높이 : \(square1.widthAndHeight)") // 너비 : 14, 높이 : 14 print("정사각형 면적 : \(square1.getArea())") // 정사각형 면적 : 196 |
'아이폰' 카테고리의 다른 글
[아이폰] - 위젯 : UIButton, UISwitch, UIImageView 사용하기 예제 (0) | 2018.10.16 |
---|---|
[아이폰] - 뷰 컨트롤러에서 효과주기(폰트, 정렬 등) (0) | 2018.10.16 |
[아이폰] - 스위프트 클래스(Class) 생성 및 초기화 (0) | 2018.10.16 |
[아이폰] - 간단한 계산기 예제 (0) | 2018.09.28 |
[아이폰] - 스위프트 클래스 생성 및 생성자와 초기화 (0) | 2018.09.28 |